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 %}

浙公网安备 33010602011771号