django过滤查询,Django filter
过滤器:(Filters)
常用过滤器介绍:
在Django的模板语言中,通过使用过滤器来改变变量的显示。
过滤器的语法:{ { value filter _ name : parameter } }
使用管道符号“”来应用筛选器。
其实我个人觉得这里过滤的概念很模糊。过滤的意义就是用后端的方法实现变量,然后拿到前端使用的过程。
例如:{{ namelower }}将在显示其值之前将name变量应用于较低的筛选器。Lower在这里的作用是把所有的文字变成小写。
注意事项:
# #滤波器支持链式运算,即一个滤波器的输出结果作为另一个滤波器的输入。
# #过滤器可以接收参数,例如:{ { sss truncatewords:30 } },它将显示sss的前30个单词。
# #如果筛选参数包含空格,则必须用引号括起来。例如,使用逗号和空格连接列表中的元素,例如:{{list join3360 , }}
# #管道符号“”周围没有空格。请务必注意,没有空格。
Django的模板语言中提供了大约60个内置过滤器。下面介绍一些常用的方法:
#default
如果变量为false或空,则使用给定的默认值;否则,使用变量的值。
{ { value default : nothing } }
如果没有传递任何值或值为空,则不会显示任何#length。
返回值的长度,作用于字符串和列表。
{{valuelength}}
后端:
“去他妈的!”
l=[a , b ,4,5,8]
前端:
{{llength}}
{{slength}}显示结果:
#filesizeformat510号
将该值格式化为可理解的文件大小单位(13kb,4m)
{{valuefilesizeformat}}
后端:
n=102478450
前端:
{{nfilesizeformat}}显示结果:
9770万#slice 切片(顾头不顾尾)
{{valueslice: 开始索引3360结束索引:步长 }}
后端:
“去他妈的!”
l=[a , b ,4,5,8]
前端:
{{lslice:1:4}}
{{sslice:5:9}}
{{lslice:2:-1}}!-从索引2开始切割,切割到以索引1为结尾的位置,忽略尾部-显示结果:
[b ,4,5]
他妈的
[4,5]#date 时间格式化输出
{ {值
date:"Y-m-dH:i:s"}}
后端:
importdatetime
ctime=datetime.datetime.now()
前端:
{{ctime}}
{{ctimedate:'Y-m-dH:i:s'}}显示结果:
June11,2019,2:51p.m.
#safe
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“safe”的方式告诉Django这段代码是安全的不必转义。
后端:
结果:
<ahref='https://www.cnblogs.com/suguangti/'>点我</a>
上面的safe是在前端取消转义,后端取消转义方法如下:
fromdjango.utils.safestringimportmark_safe
相关推荐:《Python视频教程》
#truncatechars
如果字符串字符多于指定的字符数量,那么会被截断,截断的剩余字符将用省略号结尾表示。
参数:截断的字符数(包含三个点)
后端:
结果:(注意...也算进长度里了)
abcdefg...
#truncatewords
以一个单词为一个元素,单词与单词之间的空格为区分依据,将一定数量的单词进行截断,截断后面的用...表示
一个单词加上一个空格 计数一个。
后端:
显示结果:
Lifewaslikeaboxofchocolates...
#cut
移除变量中所有的指定相同的字符串
{{valuecut:''}}
显示结果:
youdonow,isnotgoodthing,whydoyoufortoomanytimes!
#join
将列表中的元素用指定字符连接起来
后端
结果
1@2@3@4@5
标签介绍:
#for循环(内部有个empty判断,详见下面if判断示例)
后端
结果显示:
1
forloop的使用:
后端
forlop里面有几个属性需要我们注意,比如 counter0,counter,first,last它们对应的值在for循环过程中的开始和结束是不一样的
#if 判断
{%forfooinl%}
l=['a','b','c','d','e']
3.自定义过滤器/标签/inclusion_tag:
必须做的三件事
1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)
2.在该新建的文件夹内新建一个任意名称的py文件
3.在该py文件中需要固定写下面两句代码
①这里在app01项目程序文件夹新建templatetags文件夹,在此文件夹内新建一个mine.py文件,打开mine.py文件>>输入:
fromdjangoimporttemplate
②前端html文件内使用过滤器或者标签:
{%loadmine%}<!--要使用自定义过滤器和标签,需要先加载自己定义的文件-->
显示的结果:
99
自定义inclusion_tag
inclusion_tag的作用:创建一个动态的html页面文件a.html,这个页面文件a可以在另外一个页面b中被调用,实现这个页面a应该有的功能。比如:
在上面的mine.py文件中创建inclusion_tag:
#mine.py文件创建inclusion_tag
inclusion_t_test.html文件里面:
<!--inclusion_t_test.html文件,被导入的html文件-->
调用的html页面文件:
{%loadmine%}<!--必须要先加载创建标签的文件-->
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。