雖然 Django 內建的樣版引擎(template engine)多數情況下已經夠用,但也可以考慮蠻多人使用的 Jinja2 ,使用起來也很方便,頗受好評。
本文將展示如何在 Django 中整合 Jinja2 這套樣版引擎(template engine) 。
本文環境
- Ubuntu 16.04
- Python 3.5.2
- Django 1.10.6
安裝 Jinja2
安裝 Jinja2 的步驟很簡單,透過 pip 就可以進行安裝了:
$ pip install Jinja2
設定 settings.py
Django 整合 Jinja2 的主要步驟就是修改 settings.py
中的 TEMPLATES
設定即可,例如:
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [
os.path.join(BASE_DIR, 'your_path', 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'autoescape': True,
}
},
]
上方的設定代表 os.path.join(BASE_DIR, 'your_path', 'templates')
中可以存放 jinja2 的樣版之外,各個 app 底下的 templates 資料夾也可以存放 jinja2 的樣版(如果要固定只有一個地方可以存放樣版的話可以把 APP_DIRS
改為 False
) 。
然後最重要的是 jinja2 目前 autoescape
設定是關閉的,為了避免 XSS 攻擊,建議在 OPTIONS
中加入 'autoescape': True
,將 autoescape
功能打開增加安全性。
使用 Jinja2
設定完 settings.py 之後,樣版 render 的方法依然一樣,只有樣版語法需要改為 Jinja2 的語法,所以 views.py 裡的寫法還是可以用 Django 內建的 render
方法:
# views.py
from django.shortcuts import render
def index(request, **kwargs):
context = {
'foo': 'Hello World',
}
return render(request, 'index.html', context=context)
# templates/index.html
{{foo}} # will display 'Hello World' here
以上就是大致整合 Jinja2 的過程,有興趣的話可以閱讀參考資料了解更多。
參考資料
https://docs.djangoproject.com/en/1.11/topics/templates/