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模板之模板变量过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django基础四之模板系统

Django之模板语法

Django4.1_template之变量和过滤器

Django框架之模板层template的一些介绍和使用

Django——模板层(template)(模板语法自定义模板过滤器及标签模板继承)

django之模板层