Comment afficher loop.counter dans un modèle python jinja?

169

Je veux pouvoir afficher l'itération de la boucle actuelle dans mon modèle.

Selon la documentation: http://wsgiarea.pocoo.org/jinja/docs/loops.html , il existe une variable loop.counter que j'essaie d'utiliser.

J'ai ce qui suit:

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

Bien que rien ne soit généré sur mon modèle. Quelle est la syntaxe correcte?

Rolando
la source

Réponses:

376

La variable de compteur à l'intérieur de la boucle est appelée loop.index dans 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

Voir http://jinja.pocoo.org/docs/templates/ pour en savoir plus.

sigi
la source
167
Il convient de mentionner que si vous voulez un index basé sur 0, vous pouvez l'utiliser à la loop.index0place.
ereOn
ce qui est totalement étonnant, c'est que la référence à cela que je n'ai pas pu trouver sur leur site Web, alors que counter et counter0 sont documentés mais pas présents dans la version que j'ai installée hier.
njzk2
42

À l'intérieur d'un bloc de boucle for, vous pouvez accéder à certaines variables spéciales, y compris - loop.indexmais non loop.counter. À partir des documents officiels :

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).
tozCSS
la source
15

si vous utilisez django, utilisez à la forloop.counterplace deloop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
Daniel Butler
la source