はじめに
仕事でjinja2に触れる機会に恵まれた。名前が印象的ですね、神社ですって。前にどこかで聞いたことがあって、気になってたので今回触れられて良かった〜〜
Welcome | Jinja2 (The Python Template Engine)
Jinja2とは
Jinja2はモダンでデザイナーフレンドリーなPython用のテンプレート言語です。Djangoのテンプレートを模してあります。高速で幅広く活用でき、サンドボックスのテンプレート実行環境を使うことでセキュアにも利用できます。
Jinja2の公式ページから抜粋。
わかったこと
たしかにDjangoのテンプレートとめっちゃ似てる!という第一印象。というか、むしろテンプレの書き方はDjangoと何が違うのかわからない。Djangoを先に触っていたので、すんなりテンプレは書けた。公式に載ってるサンプルコードはこんな感じ。
<title>{% block title %}{% endblock %}</title> <ul> {% for user in users %} <li><a href="{{ user.url }}">{{ user.username }}</a></li> {% endfor %} </ul>
Djangoですね。
基本的な使い方
インストール
インストールはpipでサクッとできます。ありがとうpipを作ったひと。
pip install Jinja2
重要なオブジェクト
Jinja2はtemplate Enviroment
と呼ばれるオブジェクトを使って利用します。その名の通り、このクラスのインスタンスは設定を保存したり、ファイルシステムからテンプレートを読み込んだりするJinjaの中心的役割を果たします。そしてそういう役割のオブジェクトをCenteral Objectと呼ぶらしい。初耳だ。でも、なんか意味は雰囲気理解。また、もし必要とあらば Enviroment
インスタンスを複数生成していくつかの環境を整えることも可能とのこと。いろいろ柔軟な使い方ができそうな気もするが、その具体的な状況が浮かばない。。。
Enviroment
の設定
このコードは公式のドキュメントから引っ張ってきた、最もシンプルな環境設定例。
from jinja2 import Environment, PackageLoader, select_autoescape env = Environment( loader=PackageLoader('yourapplication', 'templates'), autoescape=select_autoescape(['html', 'xml']) )
loader
でテンプレートの参照先を指定している。ここでは./yourapplication/templates
内をテンプレートフォルダとして参照している。ほかのloader
を使ったり、自分で書くこともできるらしく、そうすることでデータベースやほかのリソースからもテンプレートを引っ張ってくることが可能だそうだ。便利そう。
テンプレートを読み込もう!
get_template()
で指定したテンプレートフォルダからテンプレートを取得することができる。
template = env.get_template('mytemplate.html')
たったのこれだけ。激楽。
ついにレンダリング!
レンダリングにはrender()
を使います。
print template.render(the='variables', go='here')
これでレンダリングされます。ありがとうございます。コードを見れば明白ですが、カッコ内にキーワード引数の要領で引数を設定すれば、テンプレート内で変数を参照することができます。いいね。
おわりに
テンプレートってなんだかワクワクしますよね。Pythonで扱ってた変数をHTMLに組み込めるっていうだけで、やれることが一気に広がって。夢が広がりまくります。僕がはじめてRailsでテンプレートを使ったときのワクワクが蘇りました。「俺は……とんでもない力を手に入れた……これでなんでもできる……」と当時は思いましたね。
+α 今日知ったこと
su
はスイッチユーザの略。勝手にスーパユーザの略と思ってて、びびった- bashで
cat (which python)
ってこういうカッコの使い方ができるのを知らなかった
毎日が発見です。
VSCodeのターミナルがぶっ壊れ気味なので直したい。前触れもなくフリーズして死ぬ。今日はほんとスペランカーなみに雑魚だった。ステージング環境でテスト中に死ななくてよかった。