Pythonでのテンプレートエンジンについて調べたのでメモ。
- Mako、Genshi、Jinja2 など色々ある(なぜか日本名が多い)
- フレームワークとしては Bottle が軽量で良さげ
- これぞ決定版!的なものはないけど Jinja2 が簡単で分かりやすそう
というわけで Jinja2 を試してみた。
名前の由来は、テンプレート ⇒ テンプル ⇒ 神社、との事。‥なるほど。
1)インストール
環境はさくらVPS(CentOS)
yum install python-pip(まだ pip が無い場合のみ)
pip install jinja2
2)Apache 設定(まだの人だけ)
Python が CGI として動くように Apache を設定します。
vi /etc/httpd/conf/httpd.conf
viエディター等で、httpd.confの下記2ヶ所を変更します。
httpd.conf
1)
<Directory "/var/www/html">
Options Indexes FollowSymLinks
↓ ExecCGI を追加
Options Indexes FollowSymLinks ExecCGI
</Directory>
2)
#AddHandler cgi-script .cgi
↓ コメントを外し、.py 追加
AddHandler cgi-script .cgi .py
設定保存後、Apache 再起動。
service httpd restart
3)テンプレート
hello.tpl.html(UTF-8)
<html>
<body>
ようこそ、{{ shop }}です。
<hr>
<ul>
{% for food in foods %}
<li>{{ loop.index }}: {{ food.name }} - {{ food.price }}円</li>
{% endfor %}
</ul>
</body>
</html>
4)フロント側(テンプレートを呼び出す側)
PythonソースファイルはすべてUTF-8で記述し、アップロード後のパーミッションは755(実行権限を与える)。また、HTMLを出力する前に下記の出力が必要。(忘れると即エラー)
print "Content-Type: text/html\n";
hello.py(UTF-8)
#!/usr/bin/python
# -*- coding: utf-8 -*-
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('./', encoding='utf8'))
tpl = env.get_template('hello.tpl.html')
foods = []
foods.append({'name':u'ラーメン', 'price':400})
foods.append({'name':u'焼き飯', 'price':500})
foods.append({'name':u'天津飯', 'price':600})
html = tpl.render({'shop':u'悟空軒', 'foods':foods})
print 'Content-Type: text/html; charset=utf-8\n'
print html.encode('utf-8')
あとは、ブラウザから hello.py にアクセスして確認。
(・o・ゞ いじょー。
参考リンク
jinja2|it-note 1.0 ドキュメント
http://maman-it-information.readthedocs.org/ja/latest/src/python/jinja2/jinja2.html
Python 公式ドキュメント(英語)
http://jinja.pocoo.org/docs/dev/