Django
中的模板過濾器強(qiáng)大又好用售担。當(dāng)然如果你的項(xiàng)目是前后端分離,未用到模板署辉,那也就不存在模板過濾器一說族铆。
模板過濾器的作用是對(duì)從后臺(tái)傳進(jìn)來的視圖變量做一些值或格式上的改變。
Django
中自帶了非常多的過濾器哭尝,基本上夠我們?cè)陧?xiàng)目中使用哥攘。
1.
Django
中的內(nèi)置過濾器
例如:add
:把add
后面的參數(shù)加給value
{{value | add : "2"}}
若value
的值為4,則輸出為6.
再例如:cut
:移除value
中所有與給定參數(shù)變量相同的字符
{{value | cut:" "}}
若value
為"Hello world"
,則輸出"Helloworld"
(去掉了空格)。
不過材鹦,有時(shí)候根據(jù)業(yè)務(wù)需求我們要寫自己的模板過濾器逝淹,下面我們來講一下自定義模板過濾器。
2.自定義不帶參數(shù)的過濾器
我在Markdown你的文章和代碼高亮也用到了此類過濾器桶唐。例如栅葡,我們來實(shí)現(xiàn)一個(gè)叫做my_upper
的過濾器,用來將字符串轉(zhuǎn)化為大寫形式(雖然Django
已經(jīng)實(shí)現(xiàn)了——upper
)尤泽。
例如:
{{value | my_upper}}
若value
為"Hello world"
欣簇,則輸出"HEELO WORLD"
具體操作:在你的應(yīng)用目錄下新建一個(gè)名為templatetags
的文件夾规脸,在其內(nèi)部新建__init__.py
(可為空)和custom_filter.py
這兩個(gè)文件,編輯custom_filter.py
:
from django import template
register = template.Library()
@register.filter
def my_upper(value):
try:
value.upper()
except Exception, e:
return value
這樣便將my_upper
這個(gè)過濾器定義好了醉蚁,在使用時(shí)不要忘了在模板文件頭部寫入{% load custom_filter %}
燃辖。
3.自定義帶參數(shù)的過濾器
其實(shí)第一部分的兩個(gè)例子便為帶參數(shù)的過濾器鬼店,下面我們用代碼來實(shí)現(xiàn)一下网棍。
@register.filter
def get_value(mydict,key_name):
assert(isinstance(mydict,dict))
try:
return mydict[key_name]
except KeyError:
return mydict
上面的代碼意為以鍵的方式在字典中取值:
若試圖函數(shù)views.py
:
def index(request):
dicts = {"key1" : 1, "key2" : 2, "key3" : 3 }
return render(request, 'index.html', {'dicts': dicts})
在模板中的使用:
{{dicts | get_value : "key1"}}
輸出為1.(結(jié)束)