search
LoginSignup
178
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
178
Help us understand the problem. What are the problem?