2009-04-24 12 views
9

Tecnicamente dovrebbe iterare da 0 a rangeLength che emette il nome utente di c [i] [0] .from_user ... ma guardando l'esempio online, sembrano sostituire le parentesi con notazione a punti. Ho il seguente codice:Python Django Template: Iterate Through List

<div id="right_pod"> 
{%for i in rangeLength%} 
    <div class="user_pod" > 
     {{c.i.0.from_user}} 
    </div> 
{% endfor %} 

Questo attualmente emette nulla :(Se sostituisco "i" con 0 ... {{c.0.0.from_user}} ... il risultato sarà qualcosa .. (il primo utente 10 volte)

+1

Si prega di fornire la struttura di 'c'. Altrimenti è difficile interpretarlo. –

risposta

16

avete bisogno i essere un indice caso contrario, vedere se il seguente codice fa quello che stai cercando:?

<div id="right_pod"> 
{% for i in c %} 
    <div class="user_pod"> 
     {{ i.0.from_user }} 
    </div> 
{% endfor %} 
+0

Idealmente ho bisogno di essere un indice in modo da poter limitare la quantità di utenti a ricominciare. Dovrei farlo nel controller prima di passare c al modello? – TimLeung

+1

Sì, dovresti. –

+1

+1 per fare ciò nel livello controller; la vista non dovrebbe contenere una logica di business del genere. –

8

è necessario utilizzare il modello fetta filtro per raggiungere ciò che si vuole:

iterare l'oggetto (c in questo caso) in questo modo:

{% for c in objects|slice:":30" %} 

Questo avrebbe fatto in modo che si scorre solo nel corso dei primi 30 oggetti.

Inoltre, è possibile utilizzare l'oggetto forloop.counter per tenere traccia di quale iterazione del ciclo si attiva.

13

Leggere l'intero documentation on the template language's for loops. Prima di tutto, l'iterazione (come in Python) è sugli oggetti, non sugli indici. In secondo luogo, all'interno di ogni ciclo for c'è una variabile forloop con due campi che ti interessano:

Variable   Description 
forloop.counter  The current iteration of the loop (1-indexed) 
forloop.counter0 The current iteration of the loop (0-indexed)