首先,在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...