18
{% set cnt = 0 %}
{% for room in rooms %}
  {% for bed in room %}
    {% set cnt = cnt + 1 %}
  {% endfor %}
{{ cnt }}
{% endfor %}

ネストされたループがあるとします。出力された cnt は常に 0 になります。これは、最初の for ループに入ったときに定義されたものだからです。内側のループでカウンターをインクリメントすると、それは内側のループのローカル変数にすぎないように見えるため、ループ内でインクリメントされますが、そのローカル cnt はなくなります。グローバル cnt をどのように変更できますか???

Jinja2 のドキュメントは素晴らしいかもしれませんが、変数のスコープの設定については不明です。スコープについて言及しているのは、内部ブロックの「スコープ」修飾子だけでしたが、すべてに適用することはできないと思います...クレイジーです。

4

3 に答える 3

8

ループごとに、インデックス属性を持つループ オブジェクトが生成されます。

http://jinja.pocoo.org/docs/dev/templates/#for

親ループのインデックスにアクセスするには、次のようにします: http://jinja.pocoo.org/docs/dev/tricks/#accessing-the-parent-loop

または、Python https://docs.python.org/2/library/functions.html#enumerateと同じように Jinja でも enumerate を使用できます 。

于 2014-12-16T15:37:18.860 に答える