Jinja2|Pythonテンプレートエンジン

  • 77
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

Pythonでのテンプレートエンジンについて調べたのでメモ。

  • Mako、Genshi、Jinja2 など色々ある(なぜか日本名が多い)
  • フレームワークとしては Bottle が軽量で良さげ
  • これぞ決定版!的なものはないけど Jinja2 が簡単で分かりやすそう

というわけで Jinja2 を試してみた。
名前の由来は、テンプレート ⇒ テンプル ⇒ 神社、との事。なるほど。

yotsuba_s.jpg1)インストール

環境はさくらVPS(CentOS)

yum install python-pip(まだ pip が無い場合のみ)
pip install jinja2

yotsuba_s.jpg2)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

yotsuba_s.jpg3)テンプレート

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>

yotsuba_s.jpg4)呼び出し側

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・ゞ いじょー。

yotsuba_s.jpg 参考リンク

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/