JinjaはPythonで利用できるテンプレートエンジンです。 マイクロWEBフレームワークのFlaskでも採用されています。
公式ドキュメントのサンプルはほぼPython2で書かれているため、 Python3でJinja2を利用してみます。
今回は、Python3 + Jinja2単体で変数を渡しす簡単なテキストの作成をしてみます。 Jinja2はPython3.3以上に対応しています。
Jinja2
先にテンプレートの書き方を説明します。
変数を文字にして埋め込む際には'{{ 変数名 }}'とします。
user = 'suzu6'
は以下のようにすると<p>suzu6</p>
となります。
{# #}
はコメント。
<p>{{ user }}</p> {# <p>suzu6</p> #}
配列の場合
users = ['suzu6', 'suzu7', 'suzu8']
<p>{{ user[2] }}</p> {# <p>suzu8</p> #}
また、for文もこのように書けます。
{% for user in users %}
<p>{{ user }}</p>
{% endfor %}
<p>suzu6</p>
<p>suzu7</p>
<p>suzu8</p>
辞書型の場合
users = {'name': 'suzu6', 'id':28}
<select>
<option value="{{ user['id'] }}">{{ user['name'] }}</option>
</select>
" "
で囲んだ場合は中身をダブルクォーテーションにしないように注意。
user['name']
の表記だけでなく、オブジェクトっぽくドットでキーを指定できる。
<select>
<option value="{{ user.id }}">{{ user.name }}</option>
</select>
Python3でのサンプル
pipでのインストールコマンド
pip install Jinja2
文字列に対する変換
テキストに対して文字列を埋め込んでみます。
from jinja2 import Template
template = Template('Hello {{ user }}!')
dst = template.render(user='suzu6')
print(dst)
# Hello suzu6!
jinja2.Template
を使って引き渡した文字列を変換できます。
template.render()
には、テンプレート内の変数名に対して値を渡します。
複数の変数
引数を増やして複数の変数を渡します。 変数名が被らないようにしてください。
from jinja2 import Template
template = Template('Hello {{ name }}! It is {{ weather }} today.')
dst = template.render(name='suzu6', weather='fine')
print(dst)
# Hello suzu6! It is fine today.
辞書型・配列
辞書型と配列型も同様です。
param = {
'name': 'suzu6',
'age': 28
}
template = Template('{{ param.name }} is {{ param.age }} years old.')
dst = template.render(param=param)
print(dst)
# suzu6 is 28 years old.
template = Template('{{ param["name"] }} is {{ param["age"] }} years old.')
dst = template.render(param=param)
print(dst)
# suzu6 is 28 years old.
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17