自定义过滤器,标签,inclusion_tag

自定义过滤器,标签,inclusion_tag

自定义过滤器,形参做多两个

三个必须

  1. 在应用下创建一个名字"必须"叫templatetags文件夹
  2. 在该文件夹内创建"任意"名称的py文件 如 : mytag.py
  3. 在该py文件内"必须"先书写以下两句话(一个子都不能错)
		from django import template
		
		register = template.Library()

现在开始自定义过滤器

# 后端
@register.filter(name='baby')
def my_sum(v1, v2):
    return v1 + v2
# 前端
{% load mytag %}
<p>{{ n|baby:666 }}</p>

自定义标签(参数可以有多个) 类似于自定义函数

@register.simple_tag(name='plus')
def index(a,b,c,d):
    return '%s-%s-%s-%s'%(a,b,c,d)
# 使用
标签多个参数彼此之间空格隔开
<p>{% plus 'jason' 123 123 123 %}</p>
# 输出
jason-123-123-123

inclusion_tag

内部原理:现在views.py定义一个方法,再定一个页面并调用方法,并且可以传值,该方法会生成一些数据然后传递给html页面,再将渲染好的结果放到调用的位置。

@register.inclusion_tag('lift.html')
def left(n):
    data = ['第{}项'.format(i) for i in range(n)] # 列表生成式
    # 将data传递给'lift.html'
    # 第一种方式
    return {'data':data}
    # 第二种方式 
    return locals()
<ul>
    {% for datum in data %} <!--for 循环列表-->
        <li>{{ datum }}</li> <!--添加到li标签内-->
    {% endfor %}
</ul>
<body>
{% load mytag %}

{% left 10 %}
</body>

image

当HTML页面某一个地方需要传参数才能够动态的渲染,并且在多个页面上都需要使用到该局部,就可考虑该局部页面改为inclusion_tag

posted @ 2022-03-03 16:54  谢俊杰  阅读(37)  评论(0编辑  收藏  举报