Python3.7でテンプレートエンジン『Jinja2』を使う方法
pythonで動的にhtmlを表示する方法を探していたところFlaskなどにも使われている「Jinja2」を使うのが良さそうだったので少しいじってみました。
準備
pipからjinja2パッケージをインストールできます。
pip install jinja2
シンプルなコード
jinja2の実行には「テンプレートファイル」と「pythonファイル」(anacondaでもテストできます)の2つが必要となります。
以下、それぞれのファイルに書く最低限のコード。
<html> <body> ようこそ、{{ shop }}へ。 </body> </html>
# -*- coding:utf-8 -*- from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('./', encoding='utf8')) tmpl = env.get_template('jinja2_test.tmpl') #ここで shop に入る文字を指定している html = tmpl.render(shop=u"アマズン",) with open('jinja2_test.html',mode='w') as f: f.write(str(html)) print(html)
出力結果
<html> <body> ようこそ、アマズンへ。 </body> </html>
リストからテーブルを出力
今度はpythonでよく使われるリスト変数に「商品名」と「価格」を入れて、htmlにテーブルとして表示してみたいと思います。
<html> <body> <h1> ようこそ、{{ shop }}へ。<br> </h1> <hr> <ul> {% for item in items %} <li>{{ loop.index }}: {{ item.name }} - {{ item.price }}円</li> {% endfor %} </ul> </body> </html>
# -*- coding:utf-8 -*- from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('./', encoding='utf8')) #テンプレートtmplの読み込み(同ディレクトリにあるファイル) tmpl = env.get_template('jinja2_test.tmpl') #商品情報を入れるリストを初期化 items=[] #商品情報を入れる items.append({"name":u'スマホ', "price":50000}) items.append({"name":u'充電器', "price":2000}) items.append({"name":u'フィルム', "price":500}) #書き出す html = tmpl.render({"shop":u"アマズン", "items":items}) #htmlファイルとして書き出す with open('jinja2_test.html',mode='w',encoding="utf-8") as f: f.write(str(html))
tips
テンプレートファイルの拡張子は別に「.tmpl」でなくてもいい
「,.txt」や「.html」でも可能な様です。
Jinja2 Templating Engine Tutorial - Jason Rigden - Medium
使ってみた感想
高度な機能はないみたいですけど、シンプルに扱えるという点ではもっとも良さそうに思いました。
webサイト全体を構築するのには向かなそうですが、一部のpyを使ったCGIページを記述するのには便利そうです。