ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django模板之自定义过滤器,标签,inclusion_tag

2022-03-18 22:05:02  阅读:151  来源: 互联网

标签:自定义 inclusion py html Django tag 过滤器


Django模板之自定义过滤器,标签,inclusion_tag

 


 

在Django的模板语法中,我们可以使用Django定义好的过滤器、标签、inclusion_tag,

同时我们也可以使用自定义的过滤器、标签以及inclusion_tag,

那么我们如何自定义过滤器、标签、inclusion_tag呢?

自定义的前期准备的三个步骤:

1.在应用下创建一个名字“必须”叫templatetags的文件夹,

2.在该文件夹内创建“任意”名称的py文件,例如:mytag.py

3.在该py文件内"必须"先书写下面两句话(单词一个都不能错)

 

1 # mytag.py
2 # 在该py文件中输入以下两行代码  
3 from django import template
4 register = template.Library()

接下来我们就可以进行自定义标签、过滤器、inclusion_tag了,我们演示就暂时在mytag.py文件下直接演示,如果在views.py文件夹下使用,需要在views.py文件中导入该模块;

自定义过滤器、标签和inclusion_tag:

 1 # 自定义过滤器
 2 @register.filter(name='baby')  # 如果不取name的名字就会用my_sum作为过滤器名字
 3 def my_sum(v1, v2):
 4     return v1 + v2
 5 # 使用
 6 {% load mytag %}
 7 <p>{{ n|baby:666 }}</p>  # baby就是我们自定义过滤器的名字
 8 
 9 
10 
11 # 自定义标签(参数可以有多个)            类似于自定义函数
12 @register.simple_tag(name='plus')
13 def index(a,b,c,d):
14     return '%s-%s-%s-%s'%(a,b,c,d)
15 # 使用
16 标签多个参数彼此之间空格隔开
17 <p>{% plus 'yesir' 123 123 123 %}</p>
18 
19 
20 # 自定义inclusion_tag
21 """
22 内部原理
23     先定义一个方法 
24     在页面上调用该方法 并且可以传值
25     该方法会生成一些数据然后传递给一个html页面
26     之后将渲染好的结果放到调用的位置
27 """
28 @register.inclusion_tag('left_menu.html')
29 def left(n):
30     data = ['第{}项'.format(i) for i in range(n)]
31     # 第一种
32     # return {'data':data}  # 将data传递给left_menu.html
33     # 第二种
34     return locals()  # 将data传递给left_menu.html
35 # left_menu.html:
36 <ul>
37     {% for foo in data %}
38         <li>{{ foo }}</li>
39     {% endfor %}
40 </ul>
41 
42 # index.html前端页面:
43 {% left 5 %}
44 # 总结:当html页面某一个地方的页面需要传参数才能够动态的渲染出来,并且在多个页面上都需要使用到该局部 那么就考虑将该局部页面做成inclusion_tag形式

 

标签:自定义,inclusion,py,html,Django,tag,过滤器
来源: https://www.cnblogs.com/yesirya/p/16023782.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有