Django模板之模板变量过滤器
Posted open-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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")
渲染效果:
以上是关于Django模板之模板变量过滤器的主要内容,如果未能解决你的问题,请参考以下文章