2009-04-24 18 views
9

Técnicamente debe iterar de 0 a rangeLength dando como resultado el nombre de usuario de c [i] [0] .from_user ... pero al mirar en línea el ejemplo, parecen reemplazar los corchetes con notación de puntos Tengo el siguiente código:Python Plantilla Django: Iterar a través de la lista

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

este momento, da salida a nada :(Si sustituyo "i" con 0 ... {{}} c.0.0.from_user ... será algo de salida .. (el primer usuario 10 veces)

+1

Indique la estructura de 'c'. De lo contrario, esto es difícil de interpretar. –

Respuesta

16

¿necesita i a ser un índice Si no es así, ver si el siguiente código hace lo que está buscando:?

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

Idealmente, necesito que sea un índice para poder limitar la cantidad de usuarios a los que darles vueltas. ¿Debo hacer esto en el controlador antes de pasar c a la plantilla? – TimLeung

+1

Sí, deberías. –

+1

+1 para hacer esto en la capa de controlador; la vista no debe contener lógica de negocios así. –

8

se debe utilizar la plantilla de la rebanada filtro para lograr lo que quiere:

iterar sobre el objeto (en este caso c) de este modo:

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

Esto haría que asegurarse de que sólo iterar sobre los primeros 30 objetos.

Además, puede usar el objeto forloop.counter para realizar un seguimiento de la iteración de bucle en la que se encuentra.

13

Lea todo el documentation on the template language's for loops. Primero que nada, esa iteración (como en Python) es sobre objetos, no índices. En segundo lugar, dentro de cualquier bucle for existe una variable forloop con dos campos que le interesarán:

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