Help us understand the problem. What is going on with this article?

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/

yasumodev
「長い旅行に必要なのは大きなカバンじゃなく、口ずさめる一つの歌さ」スナフキン
https://twitter.com/yasumodev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away