在Django中編寫模版節點及註冊標籤的方法

2022-09-29 06:24:08 字數 1089 閱讀 3463

編寫模板節點

編寫自定義標籤的第二步就是定義乙個擁有 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_t', do_current_time)

tag() 方法需要兩個引數:

和註冊過濾器類似,也可以在python2.4及其以上版本中使用 register程式設計客棧.tag裝飾器:

@register.tag(name="current_time")

def do_current_time(parser, token):

# ...

@registwww.cppcns.comer.tag

def shout(parser, tokthvsfqaen):

# ...

如果你像在第二個例子中那樣忽略 name 引數的話,django會使用函式名稱作為標籤名稱。

本文標題: 在django中編寫模版節點及註冊標籤的方法

本文位址:

在Django框架中編寫Context處理器的方法

寫context處理器的一些建議 編寫處理器的一些建議 使每個context處理器完成盡可能小的功能。使用多個處理器是很容易的,所以你可以根據邏輯塊來分解功能以便將來復用。要注意 template context processors 裡的context processor 將會在基於這個setti...

在Python的Django框架中編寫編譯函式

當遇到乙個模板標籤 template tag 時,模板解析器就會把標籤包含的內容,以及模板解析器自己作程式設計客棧為引數呼叫乙個python函式。這個函式負責返回乙個和當前模板標籤內容相對應的節點 node 的例項。例如,寫乙個顯示當前日期的模板標籤 該標籤會根據引數指定的 strftime 格式 ...

Django中models的編寫

models的編寫 1 通過orm建立資料表from django.db import models create your models here.class publisher models.model name models.charfield max length 20 address mo...