在 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 %}