一、应用场景介绍
在前端的模板语法中,不论是将后端的函数加上自定义过滤器或自定义标签的装饰器,返回的都只是普通的数据;
而将后端函数加上inclusion_tag
装饰器可以将非完整的前端页面返回!
二、使用方法
1、在settings.py
中的INSTALLED_APPS
添加当前app的名字,不然django无法找到自定义的过滤器或标签
2、在文件夹app01中创建子文件夹templatetags
(文件夹名只能是templatetags)
3、在templatetags
新建任意.py
文件,如test_tags.py
,文件内容如下
from django import template
register = template.Library() # 注意变量名必须为register,不可改变
括号内传入的参数为 html 页面的名字,装饰的函数可以将函数的返回值传给这个 html 页面
注意:该函数只能返回字典类型的数据,如果是其他类型数据,只能用locals()
# 使用inclusion_tag装饰器
@register.inclusion_tag('test_tag.html',name='my_test')
def index(xxx):
list_test = []
for i in range(xxx):
list_tset.append('第 %s 页'%i)
return locals()
test_tag.html
需要注意:该文件不能是完整的 html 文件,只能书写一些小组件的 html 代码
<ul>
{% for i in list_test %}
<li>i</li>
{% end for %}
</ul>
对于普通的字典类型的数据,直接按key获取
# 使用inclusion_tag装饰器
@register.inclusion_tag('test_tag.html', name='my_test')
def index(xxx):
return {'one':1, 'two':2}
<p>
{{ one }}
</p>
<p>
{{ two }}
</p>
4、前端的使用
在主要的前端 html 文件中
先加载test_tags.py
文件
{% load test_tags %}
再调用
{% my_test 10 %}
三、效果展示
在templatetags
新建任意.py
文件,如test_tags.py
,文件内容如下
from django import template
register = template.Library() # 注意变量名必须为register,不可改变
# 使用inclusion_tag装饰器
@register.inclusion_tag('test_tag.html',name='my_test')
def index(xxx):
list_test = []
for i in range(xxx):
list_tset.append('第 %s 页'%i)
return locals()
test_tag.html
<ul>
{% for i in list_test %}
<li>i</li>
{% end for %}
</ul>
前端展示结果
<body>
{% load test_tags %}
{% my_test 10 %}
</body>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAVnYuOS-1656063767539)(图片.assets/模板1.png)]