在 Jinja2 循环中设置标志,在循环外访问
Set flag in Jinja2 loop, access outside of loop
我想在 Jinja2 模板中为循环设置一个标志,然后根据标志显示或不显示某些内容,如下所示:
{% set foobar = False %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% set foobar = True %}
{% endif %}
{% endfor %}
[...]
{% if foobar %}
At least one of the foos is bar!!!
{% endif %}
不过这似乎是不可能的,循环内设置的foobar
和循环外设置的不一样。即使 foo.bar
对其中一个 foo 的计算结果为 True,foobar
在循环外仍然为 False。
有什么方法可以只使用模板代码而不用再次遍历所有 foos 吗?
我不认为这是 Jinja2 直接支持的。
IMO 最好是完全避免它并在模板之外预先计算尽可能多的数据。
如果您无法避免在模板中执行此操作,则可以通过多种方式对其进行破解,例如使用字典或一些自定义对象:
{% set foobar = {'value': False} %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% if foobar.update({'value': foo.bar}) %}
{% endif %}
{% endif %}
{% endfor %}
[...]
{% if foobar['value'] %}
At least one of the foos is bar!!!
{% endif %}
我想在 Jinja2 模板中为循环设置一个标志,然后根据标志显示或不显示某些内容,如下所示:
{% set foobar = False %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% set foobar = True %}
{% endif %}
{% endfor %}
[...]
{% if foobar %}
At least one of the foos is bar!!!
{% endif %}
不过这似乎是不可能的,循环内设置的foobar
和循环外设置的不一样。即使 foo.bar
对其中一个 foo 的计算结果为 True,foobar
在循环外仍然为 False。
有什么方法可以只使用模板代码而不用再次遍历所有 foos 吗?
我不认为这是 Jinja2 直接支持的。
IMO 最好是完全避免它并在模板之外预先计算尽可能多的数据。
如果您无法避免在模板中执行此操作,则可以通过多种方式对其进行破解,例如使用字典或一些自定义对象:
{% set foobar = {'value': False} %}
{% for foo in foos %}
[... render the foo here ...]
{% if foo.bar %}
{% if foobar.update({'value': foo.bar}) %}
{% endif %}
{% endif %}
{% endfor %}
[...]
{% if foobar['value'] %}
At least one of the foos is bar!!!
{% endif %}