Python jinja şablonunda loop.counter çıktısı nasıl alınır?


169

Geçerli döngü yinelemesini şablonuma çıktılamak istiyorum.

Dokümanlara göre: http://wsgiarea.pocoo.org/jinja/docs/loops.html , kullanmaya çalıştığım bir loop.counter değişkeni var.

Şunlara sahibim:

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

Şablonuma hiçbir şey çıkmıyor olsa da. Doğru sözdizimi nedir?

Yanıtlar:


376

Döngü içindeki sayaç değişkeni jinja2'de loop.index olarak adlandırılır.

>>> from jinja2 import Template

>>> s = "{% for element in elements %}{{loop.index}} {% endfor %}"
>>> Template(s).render(elements=["a", "b", "c", "d"])
1 2 3 4

Daha fazla bilgi için http://jinja.pocoo.org/docs/templates/ adresine bakın .


167
0 tabanlı bir dizin istiyorsanız, loop.index0bunun yerine kullanabilirsiniz .
ereOn

Tamamen şaşırtıcı olan şey, counter ve counter0 belgelendi ancak dün yüklediğim sürümde mevcut değilken, web sitesinde bulamadım referans.
njzk2

42

Bir for-loop bloğunun içinde, - loop.indexama no dahil olmak üzere bazı özel değişkenlere erişebilirsiniz loop.counter. Gönderen resmi dokümanlar :

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

15

Eğer Django kullanımını kullanıyorsanız forloop.counteryerineloop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.