Django 模板層 自定義標籤和過濾器

2021-10-13 22:30:44 字數 2693 閱讀 7439

自定義模板標籤

要在模組內自定義標籤,首先,這個模組必須包含乙個名為register的變數,它是template.library的乙個例項

from django import template

register = template.library(

)

自定義過濾器就是乙個帶有乙個或兩個引數的python函式

第乙個引數是要過濾的對, 第二個引數是自定義的引數.

def

cut(value, arg)

:return value.replace(arg,

'')

使用過濾器

}

可以把register.filter()用作裝飾器

@register.

filter

(name=

'cut'

)def

cut(value, arg)

:return value.replace(arg,

'')

django.template.defaultfilters.stringfilter()

編寫只接收乙個字串作為第乙個引數的模板過濾器, 可以使用stringfilter的裝飾器.

如果自定義過濾器, 用於處理datetime物件, 註冊個過濾器時通常將expects_localtime標誌置為true.

@register.

filter

(expects_localtime=

true

)def

judge

(value)

:try

:return

9<= value.hour <

17except attributeerror:

return

''

設定該標誌後,如果過濾器接收的第乙個引數是乙個時區敏感的 datetime,django會在將其傳遞給過濾器前將其轉換為當前時區的時間

我們都知道, 由於html語法的特殊性, 有一些字串是不太安全的, 所以, 在前端頁面, 為了防止xss攻擊, 通常會考慮字串轉義的問題.

可以為過濾器指定is_safe=true引數, 該標誌告訴django, 若乙個"安全" 字串傳給你的過濾器, 結果仍會是安全的。若傳入了不安全的字串,django 會在需要時自動轉義.

@register.

filter

(is_safe=

true

)def

myfilter

(value)

:return value

如果確認字串是安全的, 可以使用make_safe方法標記它, 這樣django就不會轉義它.

******_tag將乙個python函式註冊為乙個簡單的模板標籤

******_tag是django.template.library的乙個方法

示例 : 編寫乙個返回當前時間的模板標籤

import datetime

from django import template

register = template.library(

)@register.******_tag

defcurrent_time

(format_string)

:return datetime.datetime.now(

).strftime(format_string)

******_tag函式可以接受任意數量的位置引數和關鍵字引數。 像這樣:

@register.******_tag

def my_tag

(a, b,

*args,

**kwargs)

: warning = kwargs[

'warning'

] profile = kwargs[

'profile'].

..return..

.

自定義inclusion標籤

輸出

first choice<

/li>

second choice<

/li>

third choice<

/li>

<

/ul>

具體的編寫方法

def

show_results

(poll)

: choices = poll.choice_set.

all(

)return

通過呼叫library物件的inclusion_tag()裝飾器方法建立並註冊inclusion標籤︰

@register.

inclusion_tag

('results.html'

)def show_results

(poll):.

..

django模板,自定義標籤和filter

注 這悲催的縮排,真是對不起觀眾了,有時間過來修改。自定義標籤大致分為三類 1 非封閉標籤如 2 封閉標籤如 3 inclusion標籤 比如 定義乙個標籤需要做兩方面工作 1 定義編譯函式 2 定義node。編譯函式的作用是將自定義node中的render所需要的引數計算出來,以備使用。比如將自定...

Django 自定義標籤

模版是乙個用django模版語言標記過的python字串。模版可以包含模版標籤和變數。模版標籤是在乙個模版裡起作用的標記。比如,乙個模版標籤可以產生控制結構的內容 if或者for 可以獲取資料庫內容或者訪問其它模版標籤。乙個標籤塊被包圍 變數標籤被 包圍 context是乙個傳遞給模版的key va...

Django 自定義標籤

新建乙個資料夾mydefined裡面在新建乙個templatetags在裡面新建mytags.py mytags.py 劉文豪 大帥哥 from django import template register template.library 建立模板物件 定義模板節點 class reversal...