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 都是可以的。模板包含 變數 或 表示式 這兩者在模板求值的時候會被替換為值。模板中還有標籤,控制模板的...