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>

相关文章
相关标签/搜索