如何输出循环。计数器在python jinja模板?

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

根据的文档,有一个loop.counter变量,我正在尝试使用:

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

而是被输出到我的模板中。正确的语法是什么?

251270 次浏览

循环内的计数器变量在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

除了loop.index之外,还有

for-loop块中,你可以访问一些特殊的变量,比如loop.index(但不能访问loop.counter)。从官方文件:

变量 描述
loop.index 循环的当前迭代。(1索引)
loop.index0 循环的当前迭代。(0索引)
loop.revindex 从循环结束开始的迭代次数(1个索引)
loop.revindex0 从循环结束开始的迭代次数(0索引)
loop.first 如果第一次迭代为True。
loop.last 如果上次迭代为True。
loop.length 序列中项目的数目。
loop.cycle 用于在序列列表之间循环的辅助函数。
loop.depth 指示当前呈现在递归循环中的深度。从1级开始
loop.depth0 指示当前呈现在递归循环中的深度。从0级开始
loop.previtem 来自前一次循环迭代的项。在第一次迭代中未定义。
loop.nextitem 下面循环迭代中的项。在最后一次迭代中未定义。
loop.changed(*val) 如果之前以不同的值调用(或根本不调用)则为。

如果你正在使用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>

在Python代码中:

env = Environment(loader=FileSystemLoader("templates"))
env.globals["enumerate"] = enumerate

在模板中:

{% for idx, val in enumerate(list) %}
\{\{ idx }}. \{\{val}}
{% endfor %}

现实生活中的例子:

{% for image in item['images'] %}
{% set image_id = item_id ~ '-preview-' ~ loop.index0 %}
<div id="\{\{ image_id }}" class="overlay">
<a class="cancel" href="#\{\{ item_id }}"></a>
<div class="popup">
{% set src = image if image.startswith('http') else '/static/images/store/' ~ item_id ~ '/' ~ image %}
<a href="\{\{ src }}"><img class="modal-img" src="\{\{ src }}"/></a>
</div>
</div>
{% endfor %}