jinja2で複数のリストをまとめてfor文で処理する
はじめに
jinja2を使う処理で結構はまったのでメモです
やりたかったこと
jinja2上で複数のリストをまとめてfor文で処理をしたかった。
以下例
A_list = [a_1, a_2, a_3] B_list = [b_1, b_2, b_3]
上記リストをindexごとにまとめて出力したかった
1セット目 a_1 b_1 2セット目 a_2 b_2 3セット目 a_3 b_3
これはpythonで実装するとzipやenumerateを使うと簡単にできます
A_list = [a_1, a_2, a_3] B_list = [b_1, b_2, b_3] for (x, y) in zip(A, B): #list1,list2を同時にループ print(a,b)
出力結果
a_1 b_1 a_2 b_2 a_3 b_3
上記のような複数リストを元にしたfor文をjinja2テンプレート上で書きたかったのですが、これがなかなか苦労しました。
結果から申し上げると以下のような形で実装できました
{% for x in A_list %}{% set A_list_loop = loop %} {# loop.index で、インデックスを取得し、A_listとB_listのindexが同一の際はfor文で結果を出力する #} {% for y in B_list %}{% if loop.index==A_list_loop.index %} A_list: {{ x }} B_list: {{ y }} {% endif %} {% endfor %} {% endfor %}
出力結果
A_list: a_1 B_list: b_1 A_list: a_2 B_list: b_2 A_list: a_3 B_list: b_3
処理の説明
jinja2においてはloop.indexを用いることにより、loopのindex番号を取得することができます
これによりまずA_listのindexを取得します
そしてB_listをまわすときにA_listのindexと同一の場合、
A_list: {{ x }} B_list: {{ y }}
を出力する、という形に書きます
上記により、複数リストを並列的に出力することができます
誰かのお役に立てましたら幸いです。 Jinjaはなかなか奥が深い
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者:コーリー・アルソフ
- 発売日: 2018/02/24
- メディア: 単行本