Jinja1

2018-02-24 15:39 更新

Jinja2 與 Jinja1 在 API 使用和模板語法上最為兼容。下面的列表解釋了 Jinja1 和 Jinja2 的區(qū)別。

API

加載器

Jinja2 使用不同的加載器 API 。因?yàn)槟0宓膬?nèi)部表示更改,不再支持 memcached 這樣的外部緩存系統(tǒng)。模板的內(nèi)存開銷與常規(guī)的 Python 模塊相當(dāng),外部緩存不能 帶來優(yōu)勢。如果你以前使用了一個自定義的加載器,請閱讀?loader API?部分。

從字符串加載模板

在過去,在默認(rèn)環(huán)境配置中使用?jinja.from_string?從字符串生成模板是可能 的。 Jinja2 提供了一個?Template?類來用于做同樣的事情,但是需要 可選的額外配置。

自動 Unicode 轉(zhuǎn)換

Jinja1 執(zhí)行把字節(jié)串從一個給定編碼到 unicode 對象的自動轉(zhuǎn)換。這個轉(zhuǎn)換不再 被實(shí)現(xiàn),因?yàn)樗c大多數(shù)使用常規(guī) Python ASCII 字節(jié)串到 Unicode 轉(zhuǎn)換的庫不 一致。一個由 Jinja2 驅(qū)動的應(yīng)用?必須?在內(nèi)部的每個地方都使用 unicode 或 確保 Jinja2 只會被傳遞 unicode 字符串。

i18n

Jinja1 使用自定義的國際化翻譯器。 i18n 現(xiàn)在作為 Jinja2 的一個擴(kuò)展,并且 使用更簡單、更 gettext 友好的接口,并且支持 babel 。更多細(xì)節(jié)見?i18n 擴(kuò)展?。

內(nèi)部方法

Jinja1 在環(huán)境對象上暴露了諸如?call_function?、?get_attribute?等內(nèi)部 方法。當(dāng)它們被標(biāo)記為一個內(nèi)部方法,則可以覆蓋它們。 Jinja2 并沒有等價(jià)的 方法。

沙箱

Jinja1 默認(rèn)運(yùn)行沙箱模式。實(shí)際上只有少數(shù)應(yīng)用使用這一特性,所以這在 Jinja2 中是可選的。更多關(guān)于上下執(zhí)行的細(xì)節(jié)見?SandboxedEnvironment?。

上下文

Jinja1 有一個上下文棧存儲傳遞到環(huán)境的變量。在 Jinja2 中有一個類似的 對象,但它不允許修改也不是單例的。由于繼承是動態(tài)的,現(xiàn)在當(dāng)模板求值時 可能存在多個上下文對象。

過濾器和測試

過濾器和測試現(xiàn)在是常規(guī)的函數(shù)。不再允許使用工廠函數(shù),且也沒有必要。

模板

Jinja2 與 Jinja1 的語法幾乎相同。區(qū)別是,現(xiàn)在宏需要用小括號包裹參數(shù)。

此外, Jinja2 允許動態(tài)繼承和動態(tài)包含。老的輔助函數(shù)?rendertemplate?作古, 而使用include?。包含不再導(dǎo)入宏和變量聲明,因?yàn)椴捎昧诵碌?import?標(biāo)簽。 這個概念在?導(dǎo)入文檔中做了解釋。

另一個改變發(fā)生在?for?標(biāo)簽里。特殊的循環(huán)變量不再擁有?parent?屬性,而 你需要自己給循環(huán)起別名。見?訪問父級循環(huán)?了解更多細(xì)節(jié)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號