Tax*_*ool 30 python for-loop jinja2
如何突破jinja2中的for循环?
我的代码是这样的:
<a href="#">
{% for page in pages if page.tags['foo'] == bar %}
{{page.title}}
{% break %}
{% endfor %}
</a>
Run Code Online (Sandbox Code Playgroud)
我有多个具有此条件的页面,并且我想在条件满足后结束循环.
Mar*_*ers 43
您不能使用break,而是过滤.从Jinja2 文档{% for %}:
与Python不同,它不可能在循环中中断或继续.但是,您可以在迭代期间过滤序列,以便跳过项目.以下示例将跳过所有隐藏的用户:
Run Code Online (Sandbox Code Playgroud){% for user in users if not user.hidden %} <li>{{ user.username|e }}</li> {% endfor %}
但是,在您的情况下,您似乎只需要第一个元素; 只过滤并选择第一个:
{{ (pages|selectattr('tags.foo', bar)|first).title }}
Run Code Online (Sandbox Code Playgroud)
这会使用selectattr()过滤器过滤列表,其结果将传递给first过滤器.
该selectattr()滤波器产生一个迭代,因此,使用first此处将只对输入迭代直到第一匹配元件,并没有进一步.
one*_*klc 12
可以使用循环控件扩展将Break和Continue添加到Jinja2. Jinja Loop Control 只需将扩展添加到jinja环境中.
jinja_env = Environment(extensions=['jinja2.ext.loopcontrols'])
Run Code Online (Sandbox Code Playgroud)
但是,如果由于某种原因需要循环,则可以使用“ loop.first”检查for循环块中的循环索引:
{% for dict in list_of_dict %}
{% for key, value in dict.items() if loop.first %}
<th>{{ key }}</th>
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33309 次 |
| 最近记录: |