更換Django預設的模板引擎為jinja2

2021-08-06 06:46:40 字數 1886 閱讀 9965

作業系統:fedora24

python版本:3.5

django版本:1.11.1

jinja2版本:2.9.6

先來談談django的模板引擎,找了下,並沒有乙個確定的名字,就簡單的叫django templates language(dtl),中文就叫django模板語言。使用中,大家會發現很多侷限性,最明顯的就是四則運算。就只能加減,乘除都不支援。另外還有判斷相等,不能直接if,要用ifequal。確實不太方便。還有一點,dtl很慢,jinja2宣稱比dtl快10-20倍。

先來安裝,pip3 install jinja2

配置:從django1.8開始,支援第三方模板引擎,可以很容易的配置到。首先,在你的專案下建立乙個jinja2_env.py,內容如下:

#from __future__ import absolute_import  # 如果是py2就取消這行的注釋

from django.contrib.staticfiles.storage import staticfiles_storage

from django.urls import reverse

from jinja2 import environment

defenvironment

(**options):

env = environment(**options)

env.globals.update()

return env

然後在setting.py設定

templates = [,},

]

例如我使用pycharm,在file-settings-language & frameworks-python template languages中修改。

這一步不是必要,但是錯誤的支援模板語言會讓你認為正確的標籤是錯誤的。

django:

jinja2}或

type="hidden"

name="csrfmiddlewaretoken"

value="

}">

django:只支援加減

}jinja2:四則運算

}

django:

do sometings

#相等do sometings

#不等jinja2:

do sometings

#相等do sometings

#不等

說起來jinja2更符合python的語法

django:

}#從1開始的索引

jinja2

}#從1開始的索引

}#從1開始的索引

django中,方法是被當作物件的屬性

jinja2中,就是當作方法,所以還可以傳遞引數。

比如說乙個表單物件,有乙個as_p()方法。

django:

}jinja2:

}

在django中,如果沒有傳入某個字典引數,使用}會列印乙個空(什麼都不列印)

但jinja2,如果值不存在,就會列印出來」}」,要想實現如dtl的功能,請使用}

實測,在模板中,本身就有變數user,是指向django.contrib.auth.models.user,如果你再傳遞乙個字典鍵為user,實際相當於沒傳入,毫無作用,所以,改名吧。

Django的模板語言與引擎

dtl django templates language 模板語言 外部鏈結。django模板語言詳解 模板語言的分類 注釋注釋分為單行注釋和多行注釋 這是多汗注釋的第一行 第二行 變數使用 定義變數 如果變數本身是字典型別 列表型別或物件.用.獲取元素 如下 所示 表示對變數name進行賦值。使...

django系列 4 模板引擎

1.django嚴格意義上來說是mtv模式 t 模板 v 檢視 在python 中使用django模板的最基本方式如下 1 可以用原始的模板 字串建立乙個 template 物件,django同樣支援用指定模板檔案路徑的方式來創 建 template 物件 2 呼叫模板物件的render方法,並且傳...

django 3 模板引擎

目錄 模板載入機制 render include模板標籤 模板繼承 編寫模板字串,建立 template 物件,建立 context 物件,然後呼叫 render 方法。示例 from django import template t template.template my name is 建立模...