2012-08-27 20 views
77

Quiero poder enviar la iteración del bucle actual a mi plantilla.¿Cómo salir de loop.counter en la plantilla python jinja?

De acuerdo con los documentos: http://wsgiarea.pocoo.org/jinja/docs/loops.html, hay una variable loopcounter que estoy tratando de usar.

Tengo el siguiente:

<ul> 
{% for user in userlist %} 
    <li> 
     {{ user }} {{loop.counter}} 
    </li> 
     {% if loop.counter == 1 %} 
      This is the First user 
     {% endif %} 
{% endfor %} 
</ul> 

Aunque nada está saliendo a mi plantilla. ¿Cual es la sintaxis correcta?

+0

Tienes '{% para el usuario en la lista de usuarios%}' dos veces. Supongo que eso no es correcto. – obmarg

Respuesta

176

La variable del contador dentro del ciclo se llama loop.index en jinja2.

>>> from jinja2 import Template 

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}" 
>>> Template(s).render(elements=["a", "b", "c", "d"]) 
1 2 3 4 

Ver http://jinja.pocoo.org/docs/templates/ por más.

+68

Vale la pena mencionar que si desea un índice basado en 0, puede usar '' loop.index0'' en su lugar. – ereOn

+0

lo que es totalmente sorprendente es que la referencia a esto no pude encontrar en su sitio web, mientras que el contador y el contador0 están documentados, pero no están presentes en la versión que instalé ayer. – njzk2

6

Dentro de un bloque for-loop, puede acceder a algunas variables especiales, como loop.index --pero no loop.counter. De the official docs:

Variable Description 
loop.index The current iteration of the loop. (1 indexed) 
loop.index0 The current iteration of the loop. (0 indexed) 
loop.revindex The number of iterations from the end of the loop (1 indexed) 
loop.revindex0 The number of iterations from the end of the loop (0 indexed) 
loop.first True if first iteration. 
loop.last True if last iteration. 
loop.length The number of items in the sequence. 
loop.cycle A helper function to cycle between a list of sequences. See the explanation below. 
loop.depth Indicates how deep in a recursive loop the rendering currently is. Starts at level 1 
loop.depth0 Indicates how deep in a recursive loop the rendering currently is. Starts at level 0 
loop.previtem The item from the previous iteration of the loop. Undefined during the first iteration. 
loop.nextitem The item from the following iteration of the loop. Undefined during the last iteration. 
loop.changed(*val) True if previously called with a different value (or not called at all). 
+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ reseña/mensajes de baja calidad/18242231) – Isma

0

Además, se puede poner la etiqueta sobre la estructura de bucle y obtendrá su contador.

<ol> 
    {% for i in users %} 
     <li>ITEM</li> 
    {% endfor%} 
    </ol> 
Cuestiones relacionadas