¿Cómo generar loop.counter en la plantilla python jinja?

Resuelto Rolando asked hace 12 años • 4 respuestas

Quiero poder enviar la iteración del bucle actual a mi plantilla.

Según los documentos , hay una loop.countervariable que estoy intentando usar:

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

Pero se envía a mi plantilla. ¿Cual es la sintaxis correcta?

Rolando avatar Aug 27 '12 23:08 Rolando
Aceptado

La variable de contador dentro del bucle se llama loop.indexen 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

Además de loop.index, también hay

  • loop.index0(índice que comienza en 0)
  • loop.revindex(índice inverso; termina en 1)
  • loop.revindex0(índice inverso; termina en 0)
  • Aún más en http://jinja.pocoo.org/docs/templates/ .
sigi avatar Aug 27 '2012 18:08 sigi

Dentro de un forbloque -loop, puede acceder a algunas variables especiales, como loop.index(pero no loop.counter). De los documentos oficiales :

Variable Descripción
loop.index La iteración actual del bucle. (1 indexado)
loop.index0 La iteración actual del bucle. (0 indexado)
loop.revindex El número de iteraciones desde el final del ciclo (1 indexada)
loop.revindex0 El número de iteraciones desde el final del ciclo (0 indexado)
loop.first Verdadero si es la primera iteración.
loop.last Verdadero si es la última iteración.
loop.length El número de elementos de la secuencia.
loop.cycle Una función auxiliar para alternar entre una lista de secuencias.
loop.depth Indica qué tan profundo está actualmente el renderizado en un bucle recursivo. Comienza en el nivel 1
loop.depth0 Indica qué tan profundo está actualmente el renderizado en un bucle recursivo. Comienza en el nivel 0
loop.previtem El elemento de la iteración anterior del bucle. Indefinido durante la primera iteración.
loop.nextitem El elemento de la siguiente iteración del bucle. Indefinido durante la última iteración.
loop.changed(*val) Verdadero si se llamó previamente con un valor diferente (o no se llamó en absoluto).
tozCSS avatar Jul 25 '2014 15:07 tozCSS