Як вивести loop.counter у шаблон python jinja?


169

Я хочу мати можливість вивести поточну ітерацію циклу до мого шаблону.

Згідно з документами: http://wsgiarea.pocoo.org/jinja/docs/loops.html , є змінна loop.counter, яку я намагаюся використовувати.

У мене є таке:

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

Хоча нічого не виводиться на мій шаблон. Який правильний синтаксис?

Відповіді:


376

Змінна лічильника всередині циклу називається loop.index у 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

Див. Http://jinja.pocoo.org/docs/templates/ для отримання додаткової інформації.


167
Варто зазначити, що якщо ви хочете використовувати індекс на основі 0, ви можете використовувати його loop.index0.
ereOn

Що абсолютно дивовижно, це те, що посилання на це я не зміг знайти на їхньому веб-сайті, тоді як лічильник та counter0 задокументовані, але відсутні у версії, яку я встановив вчора.
njzk2

42

Всередині блоку for-циклу ви можете отримати доступ до деяких спеціальних змінних, зокрема loop.index- але немає loop.counter. З офіційних документів :

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

якщо ви використовуєте джанго forloop.counterзамість цьогоloop.counter

<ul>
{% for user in userlist %}
  <li>
      {{ user }} {{forloop.counter}}
  </li>
      {% if forloop.counter == 1 %}
          This is the First user
      {% endif %}
{% endfor %}
</ul>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.