自定义标签
当前端页面显示数据时需要对某些数据进行特殊处理,此时可使用自定义标签
使用步骤:
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 %}
Django内置常用的filters
基本语法:{{ value|filter_name:参数 }} value:变量名 ; filter_name:Django内置或者自定义filter方法; 参数:处理的值
3.1、{{ value|default:参数 }} 如果value没有传值,替换default设置的参数。
3.2、{{ value|default_if_none:参数 }} 如果value为none,替换default设置的参数。
3.2、{{ value|length }} 显示value的长度
3.3、{{ value|filesizeformat }} 将value格式化一个可以识别的大小(例子:1.5k,5M等)
3.4、{{ value|slice:" 2:1" }} 对value进行切片(支持负数)
3.5、{{ value|date:"Y:m:d H:i:s"}} 格式话时间
3.6、{{ value|safe }} 直接解析为可执行的html代码
3.7、{{ value|truncatechars:30 }} 对value进行截取,只显示30个字符,用“...”代替多余的部分
3.8、{{ value|add:10 }} 做加法运算
3.9、{{ value|capfirst }} 首字母大写
3.9、{{ value|cut:'a' }} 从字符串中移除指定的字符