在Django中編寫模版節(jié)點(diǎn)及注冊(cè)標(biāo)簽的方法
編寫模板節(jié)點(diǎn)
編寫自定義標(biāo)簽的第二步就是定義一個(gè)擁有 render() 方法的 Node 子類。 繼續(xù)前面的例子,我們需要定義 CurrentTimeNode :
import datetime class CurrentTimeNode(template.Node): def __init__(self, format_string): self.format_string = str(format_string) def render(self, context): now = datetime.datetime.now() return now.strftime(self.format_string)
這兩個(gè)函數(shù)( __init__() 和 render() )與模板處理中的兩步(編譯與渲染)直接對(duì)應(yīng)。 這樣,初始化函數(shù)僅僅需要存儲(chǔ)后面要用到的格式字符串,而 render() 函數(shù)才做真正的工作。
與模板過(guò)濾器一樣,這些渲染函數(shù)應(yīng)該靜靜地捕獲錯(cuò)誤,而不是拋出錯(cuò)誤。 模板標(biāo)簽只允許在編譯的時(shí)候拋出錯(cuò)誤。
注冊(cè)標(biāo)簽
最后,你需要用你模塊的Library 實(shí)例注冊(cè)這個(gè)標(biāo)簽。 注冊(cè)自定義標(biāo)簽與注冊(cè)自定義過(guò)濾器非常類似(如前文所述)。 只需實(shí)例化一個(gè) template.Library 實(shí)例然后調(diào)用它的 tag() 方法。 例如:
register.tag('current_time', do_current_time)
tag() 方法需要兩個(gè)參數(shù):
- 模板標(biāo)簽的名字(字符串)。
- 編譯函數(shù)。
和注冊(cè)過(guò)濾器類似,也可以在Python2.4及其以上版本中使用 register.tag裝飾器:
@register.tag(name="current_time") def do_current_time(parser, token): # ... @register.tag def shout(parser, token): # ...
如果你像在第二個(gè)例子中那樣忽略 name 參數(shù)的話,Django會(huì)使用函數(shù)名稱作為標(biāo)簽名稱。
- 淺談Django自定義模板標(biāo)簽template_tags的用處
- 詳解Django項(xiàng)目中模板標(biāo)簽及模板的繼承與引用(網(wǎng)站中快速布置廣告)
- Django框架模板語(yǔ)言實(shí)例小結(jié)【變量,標(biāo)簽,過(guò)濾器,繼承,html轉(zhuǎn)義】
- Django模板繼承 extend標(biāo)簽實(shí)例代碼詳解
- 剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞
- Django中模版的子目錄與include標(biāo)簽的使用方法
- Python的Django框架中自定義模版標(biāo)簽的示例
- 在django中使用自定義標(biāo)簽實(shí)現(xiàn)分頁(yè)功能
- django框架自定義模板標(biāo)簽(template tag)操作示例
相關(guān)文章
詳解Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié)
這篇文章主要介紹了Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python 實(shí)現(xiàn)二叉搜索樹(shù)的四種方法
本文主要介紹了python 實(shí)現(xiàn)二叉搜索樹(shù)的四種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
一文教會(huì)你用Python3獲取網(wǎng)頁(yè)源代碼
學(xué)了python后,之前一些我們常用的方法,也可以換一種思路用python中的知識(shí)來(lái)解決,下面這篇文章主要給大家介紹了關(guān)于如何使用Python3獲取網(wǎng)頁(yè)源代碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Python中字典和集合學(xué)習(xí)小結(jié)
本文通過(guò)實(shí)例給大家介紹了python中字典和集合的知識(shí)小結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-07-07
python?PyQt5中QButtonGroup的詳細(xì)用法解析與應(yīng)用實(shí)戰(zhàn)記錄
在PyQt5中,QButtonGroup是一個(gè)用于管理按鈕互斥性和信號(hào)槽連接的類,它可以將多個(gè)按鈕劃分為一個(gè)組,管理按鈕的選中狀態(tài)和ID,本文詳細(xì)介紹了QButtonGroup的創(chuàng)建、使用方法和實(shí)際應(yīng)用案例,適合需要在PyQt5項(xiàng)目中高效管理按鈕組的開(kāi)發(fā)者2024-10-10
BeautifulSoup獲取指定class樣式的div的實(shí)現(xiàn)
這篇文章主要介紹了BeautifulSoup獲取指定class樣式的div的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

