這篇文章主要介紹了在Django中編寫模版節點及注冊標簽的方法,Django是Python各式各樣的高人氣框架中最為著名的一個,需要的朋友可以參考下
編寫模板節點
編寫自定義標簽的第二步就是定義一個擁有 render() 方法的 Node 子類。 繼續前面的例子,我們需要定義 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)
這兩個函數( __init__() 和 render() )與模板處理中的兩步(編譯與渲染)直接對應。 這樣,初始化函數僅僅需要存儲后面要用到的格式字符串,而 render() 函數才做真正的工作。
與模板過濾器一樣,這些渲染函數應該靜靜地捕獲錯誤,而不是拋出錯誤。 模板標簽只允許在編譯的時候拋出錯誤。
注冊標簽
最后,你需要用你模塊的Library 實例注冊這個標簽。 注冊自定義標簽與注冊自定義過濾器非常類似(如前文所述)。 只需實例化一個 template.Library 實例然后調用它的 tag() 方法。 例如:
register.tag('current_time', do_current_time)
tag() 方法需要兩個參數:
模板標簽的名字(字符串)。
編譯函數。
和注冊過濾器類似,也可以在Python2.4及其以上版本中使用 register.tag裝飾器:
- @register.tag(name="current_time")
- def do_current_time(parser, token):
- # ...
- @register.tag
- def shout(parser, token):
- # ...
如果你像在第二個例子中那樣忽略 name 參數的話,Django會使用函數名稱作為標簽名稱。
新聞熱點
疑難解答