2012年3月19日

Google App Engine with Jinja2 template

使用了Google App Engine python 2.7之後,我們發現webapp.template was deprecated,雖然webapp2的legacy support很好,但是我們還是來玩玩看新的東西吧 -- Jinja2,這是經過多方搜尋的結果決定的,其他template或框架的選擇有Django, Flask, Mako, WerkZeug等等,也考慮直接用string.Template),我用Google App Engine一直以來的心得就是『順著官方的意思走』,否則將來自己要維護更新的東西會越來越多,所以我選了Jinja2,速度接近Mako(其實模板速度從來不是重點),語法接近Django(有人抱怨吃太多記憶體),還有語法上許多貼心的改進

要注意
1.Autoescaping is not the Default

在GAE上使用Jinja2
app.yaml上設定

libraries:
- name: jinja2
version: "2.6"


Jinja的Environment是他的核心,所以先建立Environment再做render

import os
import jinja2

#setup environment for 'templates' folder
jinja_env = jinja2.Environment(
loader=jinja2.FileSystemLoader(
os.path.join(os.path.dirname(__file__), 'templates')))

jinja_env.get_template('index.html').render(data)


接下來看著文件就可以用了
Jinja2語法範例
Jinja2 filter

參考資料
Using Jinja2 Templates
Migrating to Python 2.7, part 2: Webapp and templates
Jinja2 for webapp2官方
Use Jinja2 template engine in webpy