我希望能够将当前循环迭代输出到我的模板中。
根据文档,我正在尝试使用一个loop.counter
变量:
<ul>
{% for user in userlist %}
<li>
{{ user }} {{loop.counter}}
</li>
{% if loop.counter == 1 %}
This is the First user
{% endif %}
{% endfor %}
</ul>
但是正在输出到我的模板中。正确的语法是什么?
循环中的计数器变量在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
,还有
loop.index0
(从0
开始的索引)loop.revindex
(反向索引;以1
结尾)loop.revindex0
(反向索引;以0
结尾)- 在http://jinja.pocoo.org/docs/templates/.
在for
循环块内部,您可以访问一些特殊变量,例如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) |
如果以前用不同的值调用(或根本没有调用),则为True |
如果您使用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>
现实生活中的例子:
{% 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 %}
在Python代码中:
env = Environment(loader=FileSystemLoader("templates"))
env.globals["enumerate"] = enumerate
在您的模板中:
{% for idx, val in enumerate(list) %}
{{ idx }}. {{val}}
{% endfor %}