自定义标签:写一个标签函数,能够对html页面传进来的参数进行处理,并且返回效果
过滤器:过滤器函数,把html页面传进来的参数进行处理,得到html文件中需要的变量结果
1、两者的创建:
第一步:在app中。新建一个templatetags目录,并在其中创建__init__.py文件
第二步:在settings.py的INSTALLED_APP中加入第一步的app
第三步:在第一步创建的templatetags目录中创建过滤器模板文件。此模块名称会被用来导入文件中定义的过滤器,所以命名要尽量避免与其他过滤器模块文件重复
第三步的创建任意 .py 文件,如:xx.py
from django import template
register = template.Library()
@register.simple_tag #自定义标签
def my_simple_time(v1,v2,v3):
return v1 + v2 + v3
# 最简单的标签注册方式,默认使用函数名作为标签名,
# 标签参数规则与python一般函数一致
@register.simple_tag
def replace_str(str_base, re_str, p_str=""):
return str_base.replace(re_str, p_str)
@register.filter #过滤器
def ya(value):
temp = '<a href="http://www.baidu.com?t=%s"></a>'%(value)
return temp
# 使用参数并且指定参数可不传的过滤器
@register.filter(name="change_str2")
def change_str(value, args=None):
if type(value) != str:
return value
result = "[6折,双11当天3折]" + value
if args == 1:
result = '【毛折扣啊。赔死了】' + value
elif args == 2:
result = "【不在淘宝卖了,清仓处理。1折起】" + value
return result
# 注册方式2,装饰器,默认不传参数可以使用函数名作为过滤器名称
@register.filter
def bold_str(value):
return "<b>%s</b>" % value
# 注册方式1:把change_str函数注册为过滤器
register.filter("change_str", change_str)
# register.filter(name="change_str", filter_func=change_str)
2.使用
第一步:在使用的html文件中导入之前创建的 xx.py 文件名
{% load xx %}
自定义标签的用法:
{% my_simple_time 1 2 3%} {# 函数名 参数#}
自定义过滤器的用法:
{{ 参数 | ya }}