django和flask框架中都使用了jinja2模板引擎來渲染模板,通過後端向模板中傳遞變數,通過過濾器可以修改這些變數,過濾器新增在變數名之後,中間使用豎線分割。
例如:把值的首字母轉換為大寫,其他字母轉換為小寫
}
下表列出jinjia2部分的常用過濾器
過濾器說明
safe
渲染時不轉義
capitalize
把值的首字母轉換成大寫,其他字母轉換成小寫
lower
把值轉換成小寫形式
upper
把值轉換成大寫形式
title
把值中每個單詞的首字母都轉換成大寫
trim
把值的首尾空格去掉
striptags
渲染前把值中所有的html標籤都刪掉
很多時候我們可能會想對變數做出其他的操作,而已有的過濾器達不到我們想要的功能,這時候就需要我們自定義過濾器了。
自定義過濾器的過程其實就是寫乙個函式,這個函式至少有乙個引數作為被過濾的內容,即豎線左邊的變數,其他的引數則需要傳入
可能我的例子不是很恰當,這裡只作為幫助理解過濾器的使用。
(1)先以flask為例:
首先定義兩個計算面積的裝飾器:
def square(side):
# 求正方形面積
return side*side
def rectangle(width,height):
# 求矩形面積
return width*hight
模板中的應用:
正方形面積:}
矩形面積: }
可以看到第乙個過濾器中我們直接使用了過濾器名稱(即函式名稱),第乙個引數預設即左邊傳來的變數。
在使用第二個過濾器時,我們只傳遞了乙個引數,實際我們傳遞的是過濾器中的第二個引數,當然,你還可以繼續在後面追加更多的引數。
(2)django中的例子:
在django中定義過濾器比flask多了一些步驟。
為了讓我們自定義的模板和過濾器可用,django要求我們自定義的標籤和過濾器必須在django中進行註冊。在上述檔案中新增如下**:
from django import template
register = template.library()
仍然使用上面flask中定義的裝飾器,但區別是需要加上第二部的register作為裝飾器:
@register.filter
def square(side):
# 求正方形面積
return side*side
@register.filter
def rectangle(width,height):
# 求矩形面積
return width*hight
在模板中的應用,和flask的區別不大,但首先需要引入第二步定義的檔名,即,然後其他的區別就是再有多個引數時使用冒號+引數的形式傳遞。引數有很多的情況,在冒號後面使用逗號隔開
矩形面積: }
關於jinja2的 safe 過濾器
原文 沒有接觸過這門語言,不過像很多類似的例子可供參考,如果不對輸入過濾,又恰好滿足某些條件,是很有可能由於惡意輸入導致程式崩潰,甚至使用者資訊流失的。最簡單的例子是輸出html,如果對於某些特殊符號不做轉移,很容易就會被惡意指令碼攻擊了。我猜想這門語言應該對於特定條件下的輸入有自動的過濾 an e...
十五 jinja2過濾器之實現自定義過濾器
過濾器的本質就是函式,如果在模板中呼叫這個過濾器,那麼就會將這個變數的值作為第乙個引數傳給過濾器函式,然後將函式的返回值作為濾器的返回值 實現乙個把 hello 替換成 的過濾器 也可以改為模板裡面自己設定要替換的內容 實現時間處理過濾器 返回time距離現在的時間是多久 1 如果時間間隔小於1分鐘...
10 jinja2模板過濾器
目錄default 有則使用傳的,沒則使用預設值 使用方式 如果value這個key不存在,則會使用default過濾器提供的預設值。如果你想使用類似於python中判斷乙個值是否為false 例如 none,空字串,空列表,空字典等 那麼就必須要傳遞另外乙個引數 可以使用or來替代default ...