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标签的个数

posted @ 2022-03-02 15:23  JasonBorn  阅读(68)  评论(0编辑  收藏  举报