- 过滤器
- 模板语法:
{{ 变量名 | 过滤器:可选参数 }}
- 模板过滤器可以在变量被显示前修改它,过滤器使用管道字符:
{{ name | lower }} #文档大写文本会转换成小写
- 过滤管道可以被
套接
,也就是说一个过滤器的输出可以作为下一个过滤器的输入,与linux的管道符是一样的
{{ my_list | first | upper }} #取出第一个值并转换成大写
- 有些过滤器有参数,过滤器的参数跟随冒号
:
之后并且总是以双引号""
包含
{{ bio | truncatewords:"30" }} #显示bio变量的前30个词
- 其他过滤器
addslashes
:添加反斜杠到任何反斜杠、单引号或者双引号前面date
:按照指定的格式字符串参数格式化date或者datetime对象
{{ pub_date | date:"F J, Y"}}
length
:返回变量的长度
1、default
default
为变量提供一个默认值,如果视图传输的变量的布尔值是False,那么就会使用指定的默认值,以下的值的布尔值都是False
:
0 0.0 False 0j "" [] () set() {} None
下面来看案例:
- 修改
index_test.py
视图文件:
# -*- coding: utf-8 -*- from django.shortcuts import render def Hello(request): test_view = {"name":"zhangsan","time":0} return render(request,'test.html',{"test":test_view})
修改test.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test }}</p> <h1>{{ test.time | default:"测试!!" }}</h1> #变量的布尔值为False则变量值为 测试!! </body> </html>
- 访问页面
2、length
length
可以返回对象的长度,一般适用于字符串和列表,字典返回的是键值对的数量,集合返回的是去重后的长度
- 下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = "测试" return render(request,"test.html",{"test":test_view})
修改test.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test | length }}</p> </body> </html>
- 访问页面
3、filesizeformat
- filesizeformat会以更人性化的方式显示文件的大小,其实就是加上单位,如KB、MB等
- 字典返回的是键值对的数量,集合返回的是去重后的长度,下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = 10240 return render(request,"test.html",{"test":test_view})
- 修改test.py文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test | filesizeformat }}</p> </body> </html>
- 访问页面
4、date
- date会根据指定格式对一个日期变量进行格式化,格式
Y-m-d H:i:s
返回年-月-日 时:分:秒
的格式时间
- 下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render import datetime def hello(request): test_view = datetime.datetime.now() return render(request,"test.html",{"test":test_view})
- 修改test.py文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test | date:"Y-m-d H:i" }}</p> </body> </html>
- 访问页面
5、truncatechars
- truncatechars可以截断字符串,
如果字符串包含的字符总数多于指定的字符数量
,那么多出的部分会被截断,只剩余指定数量的字符
- 下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = "测试!!案例??" return render(request,"test.html",{"test":test_view})
- 修改test.py文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test | truncatechars:4 }}</p> </body> </html>
访问页面
6、safe
Django 会自动对视图文件传到HTML文件中的标签语法进行转义,令其语义失效。而加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
safe会将字符串标记为安全,不需要转移,但是需要保证视图文件传过来的数据是绝对安全,才能使用safe
safe和后端视图文件的mark_safe效果相同
下面来看案例
修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = "<a href='https://www.baidu.com/'>点击跳转</a>" return render(request,"test.html",{"test":test_view})
- 修改test.py文件,先看不加safe的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test }}</p> </body> </html>
- 访问
现在加上safe
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> <p>{{ test | safe }}</p> </body> </html>
- 访问页面,可以进行跳转