Bagaimana cara menghasilkan loop.counter dalam templat python jinja?

167

Saya ingin dapat menampilkan iterasi loop saat ini ke template saya.

Menurut dokumen: http://wsgiarea.pocoo.org/jinja/docs/loops.html , ada variabel loop.counter yang saya coba gunakan.

Saya memiliki yang berikut ini:

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

Meskipun tidak ada output ke template saya. Apa sintaks yang benar?

Rolando
sumber

Jawaban:

374

Variabel counter di dalam loop disebut loop.index di 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

Lihat http://jinja.pocoo.org/docs/templates/ untuk informasi lebih lanjut.

sigi
sumber
166
Layak disebutkan bahwa jika Anda menginginkan indeks berbasis 0, Anda dapat menggunakannya loop.index0.
ereOn
Apa yang benar-benar menakjubkan adalah bahwa referensi ke ini saya tidak dapat menemukan di situs web mereka, sementara counter dan counter0 didokumentasikan tetapi tidak ada dalam versi yang saya instal kemarin.
njzk2
42

Di dalam blok for-loop, Anda dapat mengakses beberapa variabel khusus termasuk loop.index--tapi tidak loop.counter. Dari dokumen resmi :

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

jika Anda menggunakan django, gunakan forloop.countersajaloop.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
sumber