django 自定義tag和filter

自定義的標籤tag和filter,必需要放在已經在settings.py中INSTALLED_APP裏面註冊了的app下。django

假設app是polls
安全

首先,在polls目錄下創建templatetags目錄,結構以下:app

polls/orm

      __init__.py對象

      models.py字符串

      templatetags/string

                   __init__.py   # 包含了__init__.py的纔會被django認做是文件夾
it

                   polls_extras.py
form

      views.py
模板

在模板中使用標籤時要{% load polls_extras.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:'test string'}}即將變量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)

# 在模板中: {% current_time "%Y-%m-%d %I:%M %p" as the_time %}

           <p>the time is {{ the_time }}.</p>

相關文章
相關標籤/搜索