国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

在Django中編寫模版節(jié)點(diǎn)及注冊(cè)標(biāo)簽的方法

2019-11-25 17:09:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

編寫模板節(jié)點(diǎn)

編寫自定義標(biāo)簽的第二步就是定義一個(gè)擁有 render() 方法的 Node 子類。 繼續(xù)前面的例子,我們需要定義 CurrentTimeNode :

import datetimeclass 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ù):

  1.     模板標(biāo)簽的名字(字符串)。
  2.     編譯函數(shù)。

和注冊(cè)過(guò)濾器類似,也可以在Python2.4及其以上版本中使用 register.tag裝飾器:

@register.tag(name="current_time")def do_current_time(parser, token): # ...@register.tagdef shout(parser, token): # ...

如果你像在第二個(gè)例子中那樣忽略 name 參數(shù)的話,Django會(huì)使用函數(shù)名稱作為標(biāo)簽名稱。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 萨嘎县| 沙雅县| 本溪市| 永福县| 苗栗市| 武定县| 乐平市| 吴忠市| 乌审旗| 雅江县| 白沙| 英吉沙县| 仙游县| 玉山县| 黄山市| 海林市| 唐海县| 阿巴嘎旗| 连江县| 曲水县| 福州市| 筠连县| 西华县| 宁河县| 县级市| 龙井市| 临高县| 西峡县| 旬邑县| 宕昌县| 普定县| 冀州市| 碌曲县| 平果县| 边坝县| 河西区| 卢龙县| 承德市| 方正县| 鄂托克前旗| 乌拉特后旗|