django 自定義tag和filter

2022-09-12 09:06:12 字數 1873 閱讀 7628

首先,在polls目錄下建立templatetags目錄,結構如下:

polls/

__init__.py

models.py

templatetags/

__init__.py   # 包含了__init__.py的才會被django認作是資料夾

polls_extras.py

views.py

在模板中使用標籤時要

現在可以在polls_extras.py中定義我們自己的tag和filter了

# polls_extras.py

from django import template

# 為了可以成為在庫(liberary)中有效的標籤,module模組中(polls_extras.py)必須包含乙個template.library的例項變數register

register = template.library()

# 編寫自定義的filter

def cut(value, arg):

return value.replace(arg, '')

# 這樣在模板中}即將變數variable用cut來過濾,將variable中的'test string'剔除掉(變成了空字串)

# 大多數的filter沒有引數

def lower(value):

return value.lower()

# 編寫完自定義的filter,接下來就要註冊(register)這些filter了

register方式一:

register.filter('cut', cut)

register.filter('lower', lower)

register方式二: 將register.filter當成裝飾器來用

@register.filter(name='cut')

def cut(value, arg):

return value.replace(arg, '')

@register.filter     # 如果註明了name='xx'則filter名字為xx,如果沒有給name引數,則預設filter名字是方法的名字

def lower(value):

return value.lower()

@register.filter(is_safe=true) # is_safe=true可以過濾掉不安全的html characters(<,>,',",&),當在value基礎上再家字串時也需要用到is_safe

def add_xx(value):

return "%sxx" % value

from django.utils import timezone

@register.filter  # 對時間物件進行處理

def utc2local(times):

return timezone.localtime(timezone.make_aware(times, timezone.utc).strftime("%y-%m-%d %h:%m:%s"))

@register.filter

def number(value): # 對浮點數進行處理

if isinstance(value, float):

return "%g" % value

return value

# 自定義標籤

import datetime

@register.assignment_tag

def current_time(format_string):

return datetime.datetime.now().strftime(format_string)

# 在模板中:

the time is }.

Django自定義過濾器和自定義標籤

3 在模板下建立任意名稱的.py檔案 4 在剛剛建立的.py檔案中定製過濾器 from django.template import library register library register.filter name rule 最多包含兩個引數 defrule value,before 將b...

Django 自定義標籤

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

Django自定義函式

templates 母版.html 引入 extends include 自定義函式 simpla tag 2.任意python檔案 a.from django import template from django.utils.safestring import mark safe registe...