过滤器从字面的意思上,可以理解为:过滤掉不需要的,剩下我们需要的,Django的模板语言同样也内置了过滤器,如果你了解其他的框架对这个词一定不陌生,比如说Flask框架、Vue框架等,都内置了过滤器这个功能,在本节我们将一起学习Django框架的过滤器。
1.过滤器语法格式过滤器作用是在变量输出时,对输出的变量值做进一步的处理,比如,我们可以使用过滤器来更改变量的输出显示。过滤器跟模板标签一样,也是在模板中对函数进行调用,比如,对输出的日期进行格式化处理,或者转换大小写字母等,这些都有对应的过滤器去处理它们。当内置过滤器满足不了需求的情况下,也可自定义过滤器。过滤器的语法格式如下:
{{变量
过滤器1:参数值1
过滤器2:参数值2...}}
从语法格式我们可以得知过滤器使用
管道符进行变量与过滤器之间的连接,过滤器的可以通过组合多个过滤器实现链式调用,目前过滤器最多接受一个参数。经常使用的过滤器如下表所示:
常见的模板过滤器过滤器使用说明。length获取变量的长度,适用于字符串和列表。lower/upper转换字符串为小写/大写形式。first/last获取变量的首个/末尾元素。add:n给变量值增加n。safe默认不对变量内的字符串进行html转义。cut从给定的字符串中删除指定的值。dictsort获取字典列表,并返回按参数中给定键排序的列表。join用字符串连接列表,例如Python的str.join(list)。truncatewords如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。2.过滤器的实际应用过滤器相比模板标签要简单的多,我们可以把它们理解成一个Python函数,传递参数给他处理就可以了,当滤器接收参数后对它进行处理,最终将处理结果返回到模板中,这就是整个过滤器的实现流程,下面我们通过一些具体的实例,来更加详细理解它的使用方法。
1)获取变量的长度我们使用length过滤器得到变量的长度,为了方便演示我们使用Djangoshell编写代码,如下所示:
In[1]:fromdjango.templateimportTemplate,ContextIn[2]:t=Template("""...:phello:{{world
length}}/p...:""")...:t.render(Context({world:you}))Out[2]:\nphello:3/p\n
Djangoshell是Django提供的交互模式,可以在交互模式下使用项目工程的代码执行相应的操作,从而代替编写视图函数,这样便于测试操作,同时也可以使用它来进行model数据表的增删改查,但不能进行过于复杂的操作,它的启动命令是pythonmanage.pyshell。
模板变量world使用管道符连接length过滤器,最终得到了变量对应值you的字符串长度为3。同时world变量的值也可以是列表或者字典,是列表那么将返回列表长度,是字典将返回字典key的个数,如若没有定义变量则返回0。
2)truncatewords截取指定个数的词在一定数量的单词后截断字符串,语法格式如下所示:
{{value
truncatewords:2}}
参数是要截取的字符数量,此处为2,如果value是"Djangoiswebsite",则输出为"Djangois…",实例代码如下:
In[1]:fromdjango.templateimportTemplate,ContextIn[2]:t=Template("""...:phello:{{value
truncatewords:2}}/p...:""")...:t.render(Context({value:Djangoiswebsite}))Out[2]:\nphello:Djangois…/p\n
3)dictsort返回指定键的排序列表
dictsort它指定字典的键为参数,最后返回按照指定键排序的列表,它的用法如下所示:
In[1]:fromdjango.templateimportTemplate,ContextIn[2]:t=Template("""...:phello:{{value
dictsort:"num"}}...:""")...:t.render(Context({value:[...:{name:C语言中文网,num:2},...:{name:Django