我该如何在jinja2中跳出for循环?
我的代码如下:
<a href="#">
{% for page in pages if page.tags['foo'] == bar %}
{{page.title}}
{% break %}
{% endfor %}
</a>
我有不止一页符合这个条件,我想一旦满足条件就结束循环。
根据 Jinja2 {% for %}
文档,你不能使用 break
,你需要使用过滤器来跳过元素:
不同于 Python,在循环中无法使用
break
或continue
。但你可以在迭代时通过过滤器过滤序列以跳过特定的元素。下面的示例演示了如何跳过所有隐藏的用户:在您的情况下,似乎只需要第一个元素;只需筛选并选择第一个即可。
{% for user in users if not user.hidden %} <li>{{ user.username|e }}</li> {% endfor %}
{{ (pages|selectattr('tags.foo', 'eq', bar)|first).title }}
这里使用
selectattr()
筛选器来过滤列表,然后将结果传递给first
筛选器。
selectattr()
筛选器会产生一个迭代器,因此在这里使用first
仅会迭代到第一个匹配元素,并停止迭代。
|first
过滤器将确保不会遍历整个数据集;selectattr()
使用迭代,它不会生成一个全新的列表,因此 first
仅需要迭代直到找到第一个匹配元素。 - Martijn Pietersslice()
函数并仅使用第一批数据。 - Martijn Pietersfor
格式应该只是for x in y
。 - holmsBreak 和 Continue 可以通过循环控制扩展添加到 Jinja2 中。 Jinja 循环控制 只需将扩展添加到 Jinja 环境即可。
jinja_env = Environment(extensions=['jinja2.ext.loopcontrols'])
根据 sb32134 的评论。但是如果由于某些原因你需要循环,你可以使用 "loop.first" 在 for 循环块内检查循环索引:
{% for dict in list_of_dict %}
{% for key, value in dict.items() if loop.first %}
<th>{{ key }}</th>
{% endfor %}
{% endfor %}