15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jinjaテンプレートでfor文ループ中の変数を更新したい

Last updated at Posted at 2019-12-25

##変数の定義

{% 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': 'バナナ'}>
バナナ
15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?