Flask模板引擎之Jinja2語法介紹

2022-10-04 17:12:18 字數 2589 閱讀 8981

jinja是組成flask的模板引擎。可能你還不太了解它是幹嘛的,但你對下面這些百分號和大括號肯定不陌生:

看過《flask web開發》,很多人都能寫出來這些,但除了書裡講的,你還應該了解一些其他的語法細節。這篇文章就來介紹一些常用的語法和函式,如果想要系統完整的了解jinja,可以去讀它的文件:jinja2 documentation。

faq程式設計客棧

在jinja**上的faq裡,我挑了三個大家可能會比較感興趣的問題(簡單翻譯了一下)。

1、為什麼要叫jinja?

之所以叫jinja,是因為日本的神社(jinja)英文單詞是temple,而模板的英文是template,兩者發音很相似(這麼說來,它本來也有可能叫miao的……)。

2、jinja的速度怎麼樣?

和mako差不多,但比genshi以及django的模板引擎快10~20倍。

3、把邏輯判斷(logic)放到模板裡是個好主意嗎?

毫無疑問,你放到模板裡邏輯判斷(logic)應該越少越好。但為了讓大家都開心,適當的邏輯判斷是需要的。儘管如此,它有很多對於你能做什麼,不能做什麼的限制。

出於諸多考慮(速度,易讀性等等),jinja既不允許你放置任意的python**,也不允許所有的python表示式。這也是為什麼我們要了解jinja2的語法。

delimiters(分隔符)

語句(statements)

} 列印模板輸出的表示式(expressions)

注釋# ... ## 行語句(line statements)

多說一下注釋,這是單行注釋:

下面是多行注釋:

...#}

variables(變數)

除了普通的字串變數,jinja2還支援列表、字典和物件,你可以這樣獲取變數值:

}}}}

獲取乙個變數的屬性有兩種方式:}}

這兩種方法基本相同(深層次的區別可以暫不考慮)

filter(過濾器)

過濾器用來修改變數,使用乙個豎線和變數相隔。

}常用的內建過濾器:

}完整的fliter列表:

tests(測試,判斷)

jinja2提供的tests可以用來在語句裡對變數或表示式進行測試,如果要測試乙個變數,可以在變數後加上「is」和test名,比如:

ha, you are 42!

如果要傳入引數,可以在test後增加括號,也可以直接寫在後面。

常用的test(未說明的均返回true或false):

完整的test列表及用法見:template designer documentation

loop(迴圈)

在乙個for迴圈內,有一些特殊的變數可以使用,這是幾個常用的:

完整的列表見:

whitespace control(空格控制)

預設的設定:

也就是說,下面這幾行:

yay渲染後的結果是這樣:

yayjinja2語句佔據的空行,你自己輸出的空格,tab都將保留。

如果要去掉jinja2語句佔據的空行,可以通過設定jinja2的環境變數實現:

app.jinja_env.trim_blocks = true

app.jinja_env.lstrip_blocks = true

或者像這樣手動新增乙個減號(注意和%之間沒有空格):

yay兩者實現的效果相同,如下:

yay如果語句塊的前後都加上減號:

yay渲染後會是這樣:

yay通過jinja2提供的環境變數,你可以設定很多東西,比如分隔符(在和其他的語言產生衝突時,可以通過修改分隔符來解決)。具體見:

escaping**義)

有時你會想原樣輸出一些jinja2語句和分隔符,對於小的內容,可以使用變數表示式來輸出,比如輸出乙個分隔符:

}大的內容塊可以使用乙個raw塊包裹:

模板繼承

你可以建立乙個base.html作為基模板,把導航欄、頁尾、flash訊息、js或css檔案等等需要在每乙個頁面中顯示的內容放在基模板裡,並新增乙個空的塊用來放置其他子模板的內容:

然後在其他的模板(子模板)裡使用這個extends語句繼承它,並放置相應的內容到基模板裡定義過的空塊:

子模板的內容

如果想新增內容到在父模板內已經定義的塊,可以使用super函式:

...}

這樣可以避免覆蓋父塊的內容。

全域性函式

常用的全域性函式有:

詳細列表見:template designer documentation

其他內容

內容還有很多,比如行語句、控制流、表示式、巨集等。不再一一介紹了(寫這種介紹文章太累了……)。

具體見文件的模板部分:

template designer documentation 

相關鏈結

jinja主頁:jinja2 documentation

jinja2文件:jinja2 documentation

jinja2文件模板部分:template designer documentation

github專案頁:pallets/jinja

本文標題: flask模板引擎之jinja2語法介紹

本文位址: /jiaoben/python/263574.html

Jinja 模板引擎

模板實質上是乙個靜態的包含html語法的全部或片段的文字檔案,也可以包含變數表示的動態部分,使用真實值替換網頁模板的變數,生成對應的資料的html片段。這一過程稱為渲染。flask提供了jinja 2 模板引擎來渲染模板。1.例項 1.先建立乙個html文件 2.建立乙個 py檔案 from fla...

Flask框架(二)模板引擎JinJa2

三.巨集操作 jinja2 是乙個現代的,設計者友好的,仿照 django 模板的 python 模板語言。它速度快,被廣泛使用,並且提供了可選的沙箱模板執行環境保證安全 hello lower safe 渲染值時不轉義 capitalize 把值的首字母轉換成大寫,其他字母轉換成小寫 lower ...

Flask模板引擎Jinja2使用例項

flask提供的模板引擎為jinja2,易於使用,功能強大。模板僅僅是文字檔案,它可以生成任何基於文字的格式 html xml csv latex 等等 它並沒有特定的副檔名,html 或 xml 都是可以的。模板包含 變數 或 表示式 這兩者在模板求值的時候會被替換為值。模板中還有標籤,控制模板的...