如何在python jinja模板中输出loop.counter?


167

我希望能够将当前循环迭代输出到我的模板。

根据文档: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>

虽然没有任何输出到我的模板。正确的语法是什么?

Answers:


374

循环内部的计数器变量在jinja2中称为loop.index

>>> 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/


166
值得一提的是,如果要基于0的索引,则可以loop.index0改用。
ereOn

完全令人惊奇的是,我在他们的网站上找不到该参考,而counter和counter0已记录在案,但我昨天安装的版本中却没有。
njzk2 2014年

42

在for循环块中,您可以访问一些特殊变量,包括loop.index--but no 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).

14

如果您使用的是Django,请使用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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.