■ はじめに
https://dk521123.hatenablog.com/entry/2024/10/18/001757
https://dk521123.hatenablog.com/entry/2023/11/28/235951
https://dk521123.hatenablog.com/entry/2024/09/11/003301
https://dk521123.hatenablog.com/entry/2018/09/22/142348
等で、結構、jinja2について扱ってきたが、 ちゃんと扱っていなかったし、簡単に試せる環境もなかったので、 今回でまとめておく。
目次
【1】jinja2 1)名前「jinja2(神社2)」の由来 2)jinja2 のテンプレート拡張子「.j2」 【2】他ライブラリでの使用例 1)Flask 2)dbt 3)Ansible 【3】環境設定 1)前提条件 2)インストール 【4】サンプル 例1:Hello world 例2:別ファイルのテンプレートを取り込む 【5】使用上の注意 1)リスト内包表記はサポート外
【1】jinja2
* Pythonのテンプレートエンジン
1)名前「jinja2(神社2)」の由来
https://jinja.palletsprojects.com/en/3.0.x/faq/#why-is-it-called-jinja
より抜粋 ~~~~~~~~~~~ Why is it called Jinja? The name Jinja was chosen because it’s the name of a Japanese temple and temple and template share a similar pronunciation. It is not named after the city in Uganda. なぜ「神社」なのか? Jinjaという名前は、日本のお寺の名前であることから選ばれました。 寺院(temple)とテンプレート(template)は発音が似ているからです。 ウガンダの都市名にちなんだものではありません。 ~~~~~~~~~~~
2)jinja2 のテンプレート拡張子「.j2」
* jinja2 のテンプレートの拡張子は、慣例的には「.j2」 => jinja2を使用しているAnsibleなどでも「.j2」をよく使われている
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_best_practices.html
より抜粋 ~~~~~ templates/ # <– files for use with the template resource ntp.conf.j2 # <——- templates end in .j2 ~~~~~
【2】他ライブラリでの使用例
* かなりメジャーなライブラリに使われている
1)Flask
* Webフレームワーク 「Flask(フラスク)」の標準テンプレートエンジンとして使用 => 以下の関連記事を参照のこと
Flask ~ jinja2 ~
https://dk521123.hatenablog.com/entry/2018/09/22/142348
2)dbt
* 「dbt (data build tool)」の標準テンプレートエンジンとして使用 => 以下の関連記事を参照のこと
dbt Macro ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/29/003751
dbt ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2024/09/11/003301
3)Ansible
* 構成管理ツール
Ansible ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2018/03/01/225732
【3】環境設定
* 以下の公式ドキュメントを参考。
https://jinja.palletsprojects.com/en/3.0.x/intro/#installation
1)前提条件
* Python3.6 以上 * pip
確認例 in Windows
$ python -V Python 3.12.4 $ pip -V pip 24.2 from C:\...\pip (python 3.12) # [pip を更新する場合] # pip install --upgrade pip
2)インストール
pip install Jinja2
【4】サンプル
例1:Hello world
from jinja2 import Template template = Template('Hello, {{ name }}!!') result = template.render(name='Mike') # Hello, Mike!! print(result)
例2:別ファイルのテンプレートを取り込む
フォルダ構成
+ demo.py + templates + hello.j2
templates/hello.j2
<html> <title>{{ title }}</title> <body> Hello, {{ name }}!! </body> </html>
demo.py
from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('./', encoding='utf8')) template = env.get_template('./templates/hello.j2') output_html = template.render(title='Hello world', name='Mike') # <html> # <title>Hello world</title> # <body> # Hello, Mike!! # </body> # </html> print(output_html) # ファイル出力させたい場合 with open('output.html', mode='w') as file: file.write(str(output_html))
【5】使用上の注意
1)リスト内包表記はサポート外
公式ドキュメント
https://jinja.palletsprojects.com/en/3.0.x/faq/#isn-t-it-a-terrible-idea-to-put-logic-into-templates
より抜粋 ~~~~~~ The operators are limited to the most common ones and more advanced expressions such as list comprehensions and generator expressions are not supported. 演算子は最も一般的なものに限られており、 リスト内包やジェネレーター式などの高度な式はサポートされていない。 ~~~~~~ cf. list comprehension = リスト内包 (comprehension=理解、包含)
参考文献
https://karupoimou.hatenablog.com/entry/2019/05/20/112231
関連記事
Jinja2 ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/10/18/001757
Jinja2 ~ フィルタ ~
https://dk521123.hatenablog.com/entry/2024/10/20/002622
Jinja2 ~ Macro ~
https://dk521123.hatenablog.com/entry/2023/11/28/235951
Jinja2 ~ Whitespace Control ~
https://dk521123.hatenablog.com/entry/2024/10/29/151203
Jinja2 ~ 変数 ~
https://dk521123.hatenablog.com/entry/2025/04/05/131421
Jinja2 ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2025/04/06/001255
Jinja2 ~ 繰り返し ~
https://dk521123.hatenablog.com/entry/2025/04/07/000220
Jinja2 ~ do文 ~
https://dk521123.hatenablog.com/entry/2025/04/03/221326
dbt Macro ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/29/003751
dbt ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2024/09/11/003301
Flask ~ jinja2 ~
https://dk521123.hatenablog.com/entry/2018/09/22/142348
標準テンプレートエンジン
https://dk521123.hatenablog.com/entry/2020/01/07/212138