1. ホーム
  2. python

[解決済み] Jinja2: ループ内の変数の値を変更する

2023-03-29 09:06:36

質問

ループの外側で宣言した変数の値をループの中で変更したい。しかし、常に変更すると、ループ外の初期値を維持します。

{% 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)!