flask, ansibleでよくjinja2使っているのですが、単体で使ったことがなかったのでメモ
繰り返しのテキストを生成する2パターンを試した
テンプレートファイルをインポートして表示するパターン
ググったらよく出てくるパターン、説明不要
import jinja2 from jinja2 import Template, Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('./', encoding='utf8')) tmpl = env.get_template('temp.txt') weapons = ["スシ", "プラコラ"] print(tmpl.render(weapons=weapons))
・テンプレートファイル(temp.txt)
{% for w in weapons %} { "type": "message", "message": { "type": "text", "text": "{{ w }}" } },{% endfor %}
・出力
{ "type": "message", "message": { "type": "text", "text": "スシ" } }, { "type": "message", "message": { "type": "text", "text": "プラコラ" } },
テンプレートをソースコード内で生成する方法
わからなかったので調べた。
jinja2公式によるとfrom_string
というものがあるらしい。
import jinja2 from jinja2 import Template, Environment temp = """ {% for w in weapons %} { "type": "message", "message": { "type": "text", "text": "{{ w }}" } },{% endfor %} """ weapons = ["スシ", "プラコラ"] tmpl = Environment().from_string(temp) print(tmpl.render(weapons=weapons))
・出力
1つめのパターンと同じなので省略