Web開(kāi)發(fā)(七)Django自定義模板標(biāo)簽和過(guò)濾器

1、在應(yīng)用目錄下創(chuàng)建?templatetags?目錄(與 templates 目錄同級(jí),目錄名只能是 templatetags)。

2、在 templatetags 目錄下創(chuàng)建任意 py 文件,如:my_tags.py。

3、my_tags.py 文件代碼如下:

from django import template

register = template.Library()? # register的名字是固定的,不可改變

修改 settings.py 文件的 TEMPLATES 選項(xiàng)配置,添加 libraries 配置:

settings.py 配置文件

TEMPLATES?=?[

?{

?'BACKEND':?'django.template.backends.django.DjangoTemplates',

?'DIRS':?[BASE_DIR,?"/templates",],

?'APP_DIRS':?True,

?'OPTIONS':?{

?'context_processors':?[

?'django.template.context_processors.debug',

?'django.template.context_processors.request',

?'django.contrib.auth.context_processors.auth',

?'django.contrib.messages.context_processors.messages',

?],

?"libraries":{? ????????????????????????????????????????# 添加這邊三行配置

?'my_tags':'templatetags.my_tags'? ?? # 添加這邊三行配置 ? ? ? ?

?}?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 添加這邊三行配置

?},

?},

]

4、利用裝飾器 @register.filter 自定義過(guò)濾器。注意:裝飾器的參數(shù)最多只能有 2 個(gè)

@register.filter

def my_filter(v1, v2):?

?????return v1 * v2

5、利用裝飾器 @register.simple_tag 自定義標(biāo)簽。

@register.simple_tag

def my_tag1(v1, v2, v3):?

?????return v1 * v2 * v3

6、在使用自定義標(biāo)簽和過(guò)濾器前,要在 html 文件 body 的最上方中導(dǎo)入該 py 文件。

{% load my_tags %}

7、在 HTML 中使用自定義過(guò)濾器。

{{ 11|my_filter:22 }}

8、在 HTML 中使用自定義標(biāo)簽。

{% my_tag1 11 22 33 %}

9、語(yǔ)義化標(biāo)簽

在該 py 文件中導(dǎo)入 mark_safe。

from django.utils.safestring import mark_safe

定義標(biāo)簽時(shí),用上 mark_safe 方法,令標(biāo)簽語(yǔ)義化,相當(dāng)于 jQuery 中的 html() 方法。和前端HTML文件中的過(guò)濾器 safe 效果一樣。

@register.simple_tag

def my_html(v1, v2):?

?????temp_html = "<input type='text' id='%s' class='%s' />" %(v1, v2)?

?????return mark_safe(temp_html)

在HTML中使用該自定義標(biāo)簽,在頁(yè)面中動(dòng)態(tài)創(chuàng)建標(biāo)簽。

{% my_html "zzz" "xxx" %}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 現(xiàn)在我們已經(jīng)很熟悉Django的MTV模式了。模板(template)負(fù)責(zé)如何去展示數(shù)據(jù),而視圖(view)負(fù)責(zé)篩...
    杜賽_dusai閱讀 952評(píng)論 1 1
  • 為什么需要過(guò)濾器? 因?yàn)樵贒TL中,不支持函數(shù)的調(diào)用形式(),因此不能給函數(shù)傳遞參數(shù),這將有很大的局限性。而過(guò)濾器...
    xinmin閱讀 534評(píng)論 0 0
  • views.py中發(fā)送字符串hello,world,如果想到html中首個(gè)字母大寫,或者小寫,或者全部大寫??梢?...
    YKDog閱讀 814評(píng)論 0 2
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,822評(píng)論 28 54
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情,失敗、遺憾、錯(cuò)過(guò),源于不自信,不信任他人 覺(jué)得自己做不成,別人做不...
    吳氵晃閱讀 6,361評(píng)論 4 8

友情鏈接更多精彩內(nèi)容