Django模板之模板变量过滤器
在Django的模板语言中,通过使用 过滤器 来改变变量的显示;Django的模板语言中提供了大约六十个内置过滤器。
过滤器规则:
· 过滤器的语法: {{ value|filter_name:参数 }}
· 使用管道符"|"来应用过滤器。
注意事项:
a. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
b. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
c. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
d. '|'左右没有空格 在Django的模板语言中,通过使用 过滤器 来改变变量的显示;Django的模板语言中提供了大约六十个内置过滤器。
过滤器规则:
· 过滤器的语法: {{ value|filter_name:参数 }}
· 使用管道符"|"来应用过滤器。
注意事项:
a. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
b. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
c. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
d. '|'左右没有空格
常用过滤器:
lower |
将变量全部转换成小写 |
{{ value|lower}} |
如果value传来的字符串是"Name",会显示"name" |
upper |
将变量全部转换成大写 |
{{ value|upper}} |
如果value传来的字符串是"Name",会显示"NAME" |
default |
变量设置默认值 |
{{ value|default:"nothing"}} |
如果value没有传值或者值为空的话就显示nothing |
length |
返回字符串和列表变量的长度 |
{{ value|length }} |
如 value=['a', 'b', 'c', 'd']的话,就显示4 |
safe |
对HTML标签和JS等语法标签进行自动转义 |
{{ value|safe}} |
比如:value="<script>alert('123')</script>" |
filesizeformat |
将值格式化为一个文件大小(例如 '13 KB', '4.1 MB', '102 bytes'…) |
{{ value|filesizeformat }} |
如果 value 是 123456789,输出将会是 117.7 MB。 |
slice |
切片 |
{{ value|slice:"2:-1" }} |
如果 value="hello world" |
date |
日期时间格式化 |
{{ value|date:"Y-m-d H:i:s"}} |
如果 value=datetime.datetime.now() |
truncatechars |
截取字符串 |
{{ value|truncatechars:9}} |
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾,同时是数量包含在参数个数中 |
truncatewords |
截取单词数 |
{{ value|truncatewords:3}} |
例如:‘hello girl hi baby yue ma’,得到的结果是 'hello girl h1...' |
cut |
移除与给出参数相同的字符串 |
{{ value|cut:' ' }} |
如果value为'i love you',那么将输出'iloveyou' |
join |
按给定参数字符拼接
|
{{ value|join:"+" }} |
如果value为['i', 'love', 'you'],那么将输出'i+love+you' |
过滤器safe
Django的模板中在进行模板渲染的时候会对HTML标签和JS等语法标签进行自动转义,这样是为了安全,django担心这是用户添加的数据,比如如果有人给你评论的时候写了一段js代码,这个评论一提交,js代码就执行啦,这样你是不是可以搞一些坏事儿了,写个弹窗的死循环,那浏览器还能用吗,是不是会一直弹窗啊,这叫做xss攻击,所以浏览器不让你这么搞,给你转义了。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义
过滤器案例:
lower/upper
filtertest.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>模板变量过滤器filter测试</title> 6 </head> 7 <body> 8 <div> 9 <h1>{{ str }}</h1> 10 <h1>{{ str|lower }}</h1> 11 <h1>{{ str|upper }}</h1> 12 </div> 13 </body> 14 </html>
views.py
1 def filtertest(request): 2 s="FILter" 3 return render(request,"filtertest.html",{"str":s})
渲染效果:
default
filtertest.html
1 <h1>{{ name|default:"yang" }}</h1> 2 <h1>{{ m|default:"yang" }}</h1>
views.py
1 def filtertest(request): 2 return render(request,"filtertest.html",{"m":"100"})
渲染效果: