Django 整合 jinja 2

Posted on  May 15, 2017  in  Django  by  Amo Chen  ‐ 1 min read

雖然 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/

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!