2009-04-05 11 views
13

Lasciatemi prefazione sto appena iniziando Python quindi se questo è davvero una semplice domanda^_^Django Template - Nuova dichiarazione delle variabili

Ho un file html con il seguente contenuto:

 {%for d in results%} 
     <div class="twt"> 
      <img src="{{ d.profile_image_url }}" width="48px" height="48px" /> <span> {{ d.text }} </span> 
      <span class="date">{{ d.created_at }}</span> 
     </div> 
    {% endfor %} 

che funziona bene, ma vorrei anche dichiarare una variabile in questa pagina. Diciamo per questo esempio, possiamo RowNumber che incrementerà per ogni d visualizzato, sputando il RowNumber corrente.

Ho provato a fare:

{{ RowNumber = 0}} 
{{ RowNumber ++ }} 

Ma non sembra permettere a me di dichiarare RowNumber.

+0

titolo dovrebbe essere invece 'Django template'. – muhuk

risposta

20

Controllare il documentation sul ciclo for.

Crea automaticamente una variabile denominata forloop.counter che contiene l'indice di iterazione corrente.

Per quanto riguarda la domanda più grande su come dichiarare le variabili, non esiste un modo immediato per farlo con Django, e non è considerato una funzionalità mancante ma una funzionalità. Se davvero volevi fare ciò è possibile con custom tags ma per la maggior parte la filosofia che vuoi seguire è che per lo più tutto ciò che vuoi fare richiede che questo debba essere fatto nella vista e il modello dovrebbe essere riservato per molto semplice logica. Ad esempio, per esempio, sommando un totale, è possibile utilizzare il filtro add. Allo stesso modo, è possibile create your own filters proprio come con i tag.

+1

Grazie, e se avessi davvero bisogno di avere una nuova variabile? ad esempio sommando i totali di alcuni parametri ... – TimLeung

+0

Quindi dovresti usare un tag o un filtro personalizzato - il linguaggio di template di Django semplicemente non ti permette di dichiarare nuove variabili. – mipadi

+0

Il linguaggio template di Django è stato progettato per evitare lo stile di codifica "in-template" di PHP, ASP, JSP, ecc. Quindi questo tipo di dichiarazione, come hanno detto Paolo e mipadi, è deliberatamente mancante. Lo spirito dei modelli è che qualsiasi logica di elaborazione, come l'aggiunta, dovrebbe essere eseguita nella funzione di visualizzazione. –

7

Se si desidera impostare qualsiasi variabile all'interno di un modello Django, è possibile utilizzare this small template tag I've written.

+0

Provato questo e ottenuto: TemplateSyntaxError: 'set_var' non è una libreria di tag valida: libreria di template set_var non trovata, provata google.appengine._internal.django.templatetags.set_var. – slashdottir

+0

sembra che tu abbia dimenticato di aggiungere la tua app Django in "INSTALLED_APPS" all'interno di settings.py –

2

in Template:

{% for outer_obj in outer_list %} 
    {% for inner_obj in inner_list %} 
     {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %} 
    {% endfor %} 
{% endfor %} 

Templatetag:

@register.simple_tag 
def increment_counter(outer, inner, outer_loop_length): 
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1) 

Risultato: 0 1 2 3 ...

Problemi correlati