jinja2變數過濾器

2021-08-20 12:06:31 字數 1614 閱讀 5302

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 ...