Come produrre loop.counter nel modello jinja di Python?


167

Voglio essere in grado di generare l'iterazione del ciclo corrente sul mio modello.

Secondo i documenti: http://wsgiarea.pocoo.org/jinja/docs/loops.html , esiste una variabile loop.counter che sto cercando di utilizzare.

Ho il seguente:

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

Anche se non viene emesso nulla nel mio modello. Qual è la sintassi corretta?

Risposte:


374

La variabile contatore all'interno del loop è chiamata loop.index in 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

Vedi http://jinja.pocoo.org/docs/templates/ per ulteriori informazioni.


166
Vale la pena ricordare che se si desidera un indice basato su 0, è possibile utilizzare loop.index0invece.
Il

ciò che è assolutamente sorprendente è che il riferimento a questo non ho trovato sul loro sito Web, mentre counter e counter0 sono documentati ma non presenti nella versione che ho installato ieri.
njzk2,

42

All'interno di un blocco for-loop, puoi accedere ad alcune variabili speciali tra cui - loop.indexma no loop.counter. Dai documenti ufficiali :

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).

14

se stai usando django usa forloop.counterinvece diloop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.