前期工作:
1.在应用目录下新建一个名字必须为templatetags的文件
2.在该文件夹下创建一个任意名字的py文件
3.在该文件内,先写入以下代码
from django.template import Library
register = Library()
一、自定义过滤器
例如创建666.py
@register.filter(name='sum')
def index(a,b):
return a + b
filter.html中
<p>自定义过滤器的使用</p>
{% load 666 %}
<p>{{ 10|sum:90 }}</p>
以上渲染得出的结果是100
但是在自定义过滤器中,规定只能传入参数,但是我们可以通过蛇形走位来实现多参数的传入,例如以以上代码为例可以将90改成[1, 2, 3],将[1, 2, 3]作为一个参数传入,然后再进行处理。
二、自定义标签
666.py
@register.simple_tag(name=’mytag')
def ooo(a, b , c , d , e):
return '%s-%s-%s-%s' % (a, b, c, d ,e)
tag.html
<p>自定义标签的使用</p>
{% load 666 %}
<p>{{ mytag 1 2 'bbb' 'ccc' 'hi'}}</p>
{# 以空格隔开写入多个参数值 #}
以上渲染得出的结果是1-2-bbb-ccc-hi
simple_tag无法用于逻辑条件判断
三、自定义inclusion_tag
demo.html
<ul>
{% for foo in l %}
<li>{{ foo }</li>
{% endfor %}
</ul>
666.py
@register.inclusion_tag('demo.html', name='my_inclusion'):
def func(num):
l = []
for i in num:
l.append[i]
# 将列表传递给demo.html
# return locals()
return {'l': l}
index.html
<p>自定义inclusion_tag的使用</p>
{% load 666 %}
{% my_inclusion 3 %}
<p>{{ xxx 1 2 'bbb' 'ccc' 'hi'}}</p>