■ はじめに
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)他ライブラリでの使用例 2)補足:名前「jinja2(神社2)」の由来 【2】環境設定 1)前提条件 2)インストール 【3】サンプル 例1:Hello world 例2:別ファイルのテンプレートを取り込む 【4】使用上の注意 1)リスト内包表記はサポート外
【1】jinja2
* Pythonのテンプレートエンジン
1)他ライブラリでの使用例
* かなりメジャーなライブラリに使われている
[a] Flask
* Webフレームワーク 「Flask(フラスク)」の標準テンプレートエンジンとして使用 => 以下の関連記事を参照のこと
Flask ~ jinja2 ~
https://dk521123.hatenablog.com/entry/2018/09/22/142348
[b] 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
2)補足:名前「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】環境設定
* 以下の公式ドキュメントを参考。
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
【3】サンプル
例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.tmpl
templates/hello.tmpl
<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.tmpl') 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))
【4】使用上の注意
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
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