自定义标签
当前端页面显示数据时需要对某些数据进行特殊处理,此时可使用自定义标签
使用步骤:
1.在应用文件夹下新建templatetags目录,并且需要定义__init__.py空文件,注意:目录名必须是‘templatetags’
2.在templatetags文件下创建my_tags.py文件(可自定义文件名)
my_tags.py中定义方法,@register.filter 最多只能传递两个参数,@register.simple_tag传递的参数个数不限制
my_tags.py
1 from django import template
2
3 register = template.Library() #实例化template,实例对象名称必须是register
4
5 # 定义两个方法,处理文章显示过长使用.....来展示
6 @register.filter #filter最多两个参数
7 def abc(s,length=2):
8 if len(s) >length:
9 s = s[:length] + '.....'
10 return s
11
12 @register.simple_tag #simple_tag不限制参数个数
13 def abc2(s,length=2):
14 if len(s) >length:
15 s = s[:2] + '.....'
16 return s
3.将自定义标签应用在templates的HTML文件中
在HTML第一行需要使用{% load my_tags %}引用自定义标签,my_tags 即为定义的文件名
index.html
1 #伪代码
2
3 {% extends 'base.html' %}
4 {% load my_tags %}
5
6 {% for article in articles %}
7 <li><i><a href="/detail?id={{ article.id }}"><img src="/static/{{ article.img }}"></a></i>
8 <h3><a href="/detail?id={{ article.id }}">{{ article.title }}</a></h3>
9 {# filter:abc方法参数1为article.desc(需要处理的字段),第二参数通过格式: 参数1 | 方法名:参数2 #}
10 {# <p>{{ article.desc | abc:1}}</p>#}
11 {# simple_tag: 格式:{{ % 方法名 参数1 20 30 % }}, 20 30为第2和第3个参数,通过空格间隔 #}
12 <p>{{% abc2 article.desc 20 30 %}}</p>
13 </li>
14 {% endfor %}