Edited at

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

More than 1 year has passed since last update.

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/