作業系統: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 建立模...