2011-11-10 9 views
5

Sto passando una lista a una vista. Il mio array è simile a questo: [football, basketball, soccer]. A mio parere, vorrei visualizzare qualcosa di simile:Come visualizzare l'indice durante l'iterazione dell'elenco con Django?

1. football 
2. basketball 
3. soccer 

Ciò significa che avrei dovuto scorrere l'elenco che viene passato alla matrice, fare un ciclo for sugli elementi. Come dovrei farlo nel file di modello?

Per ogni elemento, dovrei ottenere il suo indice e aggiungerne 1. Ora, non ho idea di come farlo nelle viste. Un modo in cui ho pensato di fare questo sarebbe stato quello di creare un dizionario, ad esempio {'1', 'football': '2', 'basketball': '3', 'soccer'}, ma dato che ho già i dati in un formato elenco, preferirei non convertirlo.

risposta

21

Si desidera la variabile di modello forloop.counter.

Il ciclo for stabilisce una serie di variabili disponibili all'interno del ciclo:

forloop.counter L'attuale iterazione del ciclo (1-indicizzato)

Quindi il codice sarà come:

{% for sport in sports %} 
    <p>{{forloop.counter}}. {{ sport }}</p> 
{% endfor %} 

Naturalmente, per visualizzare semplicemente i dati come si fa nella domanda, più facile modo è solo per mostrare gli elementi in una lista ordinata, e il browser farà la numerazione per voi:

<ol> 
{% for sport in sports %} 
    <li>{{ sport }}</li> 
{% endfor %} 
</ol> 
3

La risposta da @nrabinowitz è una buona soluzione se si desidera utilizzarlo in un modello. Ma penso che stavi chiedendo di farlo da una vista.

Il modo migliore per ottenere l'indice e il valore da un elenco sta usando la funzione enumerate, in questo modo:

>>> sports = ['football', 'basketball', 'soccer'] 
>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i, sport) 
0. football 
1. basketball 
2. soccer 

Oppure, se si vuole un indice 1-based:

>>> for i,sport in enumerate(sports): 
...  print "%d. %s" % (i+1, sport) 
1. football 
2. basketball 
3. soccer 
Problemi correlati