##変数の定義
{% set cnt=1 %}
{{cnt}}
1
##for文でインクリメントさせる
現行のバージョンでは、下記のようにfor文内で変数の上書きはできない
{% set cnt = 1 %}
{% set charaList = ['a','b','c'] %}
{% for chara in charaList %}
<h1>現在のcntは{{cnt}}です</h1>
{% set cnt = cnt + 1 %}
{% endfor %}
現在のcntは1です
現在のcntは1です
現在のcntは1です
###では、どうするか?
jinja 2.10で追加されたnamespaceオブジェクトを使う。
参考
{% set ns = namespace(cnt = 1) %}
{% set charaList = ['a','b','c'] %}
{% for chara in charaList %}
<h1>現在のcntは{{ns.cnt}}です</h1>
{% set ns.cnt = ns.cnt + 1 %}
{% endfor %}
現在のcntは1です
現在のcntは2です
現在のcntは3です
##ループカウンタ
ループ回数を数えたいだけであればloop.indexが使える。
{% set charaList = ['a','b','c'] %}
{% for chara in charaList %}
<h1>現在は{{ loop.index }}回目です</h1>
{% endfor %}
現在は1回目です
現在は2回目です
現在は3回目です
##参考
jinjaテンプレートのforループで変数をインクリメントする方法は?
##追記(2019/12/28)
###namespaceオブジェクトについてもう少し詳しく
pythonの辞書型と同じようにふるまう。
要素の追加の仕方には注意。
Jinja Api > namespace
{%- set ns = namespace(key1 = "りんご" , key2 = "みかん") %}
{%- set ns.key3 = "バナナ" %}
<p>{{ns}}</p>
<p>{{ns.key3}}</p>
<Namespace {'key1': 'りんご', 'key2': 'みかん', 'key3': 'バナナ'}>
バナナ