Como gerar loop.counter no modelo python jinja?

167

Quero poder gerar a iteração do loop atual para o meu modelo.

De acordo com os documentos: http://wsgiarea.pocoo.org/jinja/docs/loops.html , há uma variável loop.counter que estou tentando usar.

Eu tenho o seguinte:

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

Embora nada esteja sendo produzido no meu modelo. Qual é a sintaxe correta?

Rolando
fonte

Respostas:

374

A variável do contador dentro do loop é chamada loop.index no 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

Veja http://jinja.pocoo.org/docs/templates/ para mais informações.

sigi
fonte
166
Vale ressaltar que se você quiser um índice baseado em 0, poderá usá-lo loop.index0.
vez de
o que é totalmente surpreendente é que a referência a isso não foi encontrada em seu site, enquanto counter e counter0 estão documentados, mas não estão presentes na versão que instalei ontem.
Njzk2
42

Dentro de um bloco de loop for, você pode acessar algumas variáveis ​​especiais, incluindo - loop.indexmas não loop.counter. Dos documentos oficiais :

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
fonte
14

se você estiver usando o django use em forloop.countervez 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
fonte