Django自定义过滤器,自定义标签,include_tag

虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。

自定义必须的三步

自定义过滤器  只能传一个参数

1. 引入django中的template
from django import template
2. 创建模板库对象
register = template.Library()
3. 将函数注册到模板库中
装饰器方法注册 @register.filter(name
='add1')
函数之后注册
register.filter('add1', foo)
# @register.filter(name='add1')
def foo(a, b):
    return a + b

register.filter('add1', foo)
前端页面使用
{% load myfilter %} {{ dic.a|add1:2 }}

 

自定义标签    可以传多个参数

1. 引入django中的template
from django import template
2. 创建模板库对象
register = template.Library()
3. 将函数注册到模板库中
装饰器方法注册
@register.simple_tag(name='add1')
函数之后注册
register.simple_tag('add1', foo)
# @register.simple_tag(name='tag')
def plus(a, b, c):
    return a + b + c


register.simple_tag('tag', plus)
前端页面使用
{% load myfilter %}
{% tag 1 2 3 %}

 

imclusion_tag

1. 引入django中的template
from django import template
2. 创建模板库对象
register = template.Library()
3. 将函数注册到模板库中
装饰器方法注册
@register.inclusion_tag('index.html',name='incl')
函数之后注册
register.inclusion_tag('index.html','incl')
# @register.inclusion_tag('index.html', name='incl')
def xxx(n):
    l = ['第%s项' % i for i in range(n)]
    return {'l': l}


register.inclusion_tag('index.html', 'incl')
index.html文件
<ul>
{% for foo in l %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
前端使用
{% load myfilter %}
{% incl 5 %}

 

posted @ 2019-06-24 21:57  yyfgrd  阅读(318)  评论(0)    收藏  举报