Jinja2:在循环内更改变量的值


问题内容

我想在循环内更改在循环外声明的变量的值。但是总是在变化,它将初始值保持在循环之外。

{% set foo = False %}

{% for item in items %}
  {% set foo = True %}
  {% if foo %} Ok(1)! {% endif %}
{% endfor %}

{% if foo %} Ok(2)! {% endif %}

这将呈现:

Ok(1)!

因此,到目前为止发现的唯一(坏)解决方案是:

{% set foo = [] %}

{% for item in items %}
  {% if foo.append(True) %} {% endif %}
  {% if foo %} Ok(1)! {% endif %}
{% endfor %}

{% if foo %} Ok(2)! {% endif %}

这将呈现:

Ok(1)!
Ok(2)!

但是,它非常丑陋!还有另一个更优雅的解决方案吗?


问题答案:

也尝试基于字典的方法。似乎不太丑。

{% set vars = {'foo': False} %}

{% for item in items %}
  {% if vars.update({'foo': True}) %} {% endif %}
  {% if vars.foo %} Ok(1)! {% endif %}
{% endfor %}

{% if vars.foo %} Ok(2)! {% endif %}

这也会呈现:

Ok(1)!
Ok(2)!