Django | 自定义过滤器、标签、inclusion_tag
自定义过滤器、标签、inclusion_tag
自定义之前注意事项:
1. 在应用下创建一个名字'必须'为templatetags文件夹
2. 在该文件夹内创建'任意'名称的py文件 比如:mytag.py
3. 在该py文件内'必须'编写下面两句话
from django import template
register = templante.Library()
# 注:变量名也不能改变
自定义过滤器:
# 关键字:@register.filter(name='自定义名字')
eg:
# 自定义过滤器:
from django import template
register = template.Library()
@register.filter(name='mysum')
def my_sum(v1,v2):
return v1+v2
# 使用
{% load mytag %} # 导入文件
<p>{{ n|mysum:s }}</p> # 字符串拼接
<p>{{ i|mysum:222 }}</p> # 数字相加
自定义标签
# 自定义标签
@register.simple_tag(name='plus')
def index(a,b,c,d):
return '%s-%s-%s-%s'%(a,b,c,d)
# 具体使用
{% load mytag %}
<p>{% plus 'gary' 28 'age' 20 %}</p>
自定义inclusion_tag
# 内部原理
先定义一个方法
在页面上调用该方法 并且可以传值
该方法会生成一些数据然后传递给一个html页面
之后将渲染好的结果放到调用的位置
# 自定义inclusion_tag
@register.inclusion_tag('left_menu.html')
def left(n):
data = ['标签{}'.format(i) for i in range(n)] # 列表生成式
# 将data传递给'left_menu.html'
# 第一种方式:
# return {'data':data}
# 第二种方式:
return locals()
# left_menu.html
<ul>
{% for foo in data %} # for循环data列表
<li>{{ foo }}</li> # 添加到li标签内
{% endfor %}
</ul>
# 使用
{% load mytag %} # 导入文件
{% left 10 %} # 参数可指定li标签的个数