接着上一节,模板标签中还有一个对象是:过滤器
1.过滤器介绍
主要用在模板文件(如 html 文件)中。
模板语法:
{{ 变量名 | 过滤器:可选参数 }}
特点:双括号,使用过滤器的格式就是这个竖线又叫管道,过滤器的参数用冒号隔开,模板过滤器可以在变量被显示前修改它,过滤器使用管道字符(|)
2.简单过滤器
{{ name|lower }}
解释: {{ name }} 变量被过滤器 lower 处理后,大写转换为小写。lower就是一个过滤器函数
代码举例:
1. 首先通过地址访问路由文件urls.py, 其代码如下:(与上一小节变量是一样的)
路径映射的对象为views里面的mydef()函数
from django.urls import path
from . import views
urlpatterns = [
path('mytemp/', views.mydef),
]
2. 再看views.py,mydef()函数返回的是一个mytemp.html网页,里面含一些变量,这个变量叫name,他的是值是views_name,这里注意views_name的值里面有大写,在被网页最终显示前,是可以修改的。
from django.shortcuts import render
def mydef(request):
views_name="DEMO简单示例1"
return render(request,"mytemp.html",{"name":views_name})
3.再看mytemp.html中,对name对象增加一个过滤器lower,如下图:
<h1>{{name|lower}}</h1>
最终应该显示为如下图的小写:成功!
3.多管道过滤器
过滤管道可以被套接 ,也就是说 一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|lower }}
解释:首先取第一个元素(或第一个字符),然后再转化为小写。
代码举例:
1. 首先通过地址访问路由文件urls.py, 其代码如下:(与上一小节变量是一样的)
路径映射的对象为views里面的mydef()函数
from django.urls import path
from . import views
urlpatterns = [
path('mytemp/', views.mydef),
]
2. 再看views.py,mydef()函数返回的是一个mytemp.html网页,里面含一些变量,这个变量叫name,他的是值是views_name,这里注意views_name的值里面有大写,在被网页最终显示前,是可以修改的。
from django.shortcuts import render
def mydef(request):
views_name="DEMO简单示例1"
return render(request,"mytemp.html",{"name":views_name})
3.再看mytemp.html中,对name对象增加两个过滤器first lower,如下图:
<h1>{{name|first|lower}}</h1>
最终应该显示为如下图的:成功!
4.带参数的过滤器
有些过滤器有参数.
过滤器的参数在冒号之后,并且总是以双引号包含。 例如:
{{ name|truncatewords:"4" }}
解释:显示变量 name的前4个单词。 truncatewords用法:取这个模板变量的前 N 个单词,不可用于中文。如果要用于中文,请用模板过滤器truncatechars,取这个模板变量的前 N 个字符。
1. urls.py文件不变,参考上面,省略
2. 再看views.py,views_name改为英文,因为truncatewords过滤器只能用于英文,且识别的是单词,而不是字符。
from django.shortcuts import render
def mydef(request):
views_name="DEMO simple the first"
return render(request,"mytemp.html",{"name":views_name})
3.再看mytemp.html中,过滤器显示前2个单词,如下图:
<h1>{{name|truncatewords:2}}</h1>
最终应该显示为如下图的:成功!
5.default
default 为变量提供一个默认值。格式如下:
{{ name|default:"简单示例01" }}
冒号后面跟着的是默认值
如果 views 传的变量的布尔值是 false,则使用指定的默认值。
有哪些值为 false呢?如下的值都是false,
0 0.0 False 0j "" [] () set() {} None
1. 将views.py文件中views_name=0
from django.shortcuts import render
def mydef(request):
views_name=0
return render(request,"mytemp.html",{"name":views_name})
2. 再看mytemp.html中,过滤器显示前2个单词,如下图:
<h1>{{name|default:"简单示例01"}}</h1>
3. 最终显示如下图:成功!
6.length
返回对象的长度,适用于字符串和列表。字典返回的是键值对的数量,集合返回的是去重后的长度。格式如下:
{{ name|length }}
因为比较简单,这里不再列出代码了,大家可以自行尝试。
7.filesizeformat
以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)。格式如下:
{{ name|filesizeformat}}
1. 举例来说,将views.py文件中views_name=1024
from django.shortcuts import render
def mydef(request):
views_name=1024
return render(request,"mytemp.html",{"name":views_name})
2. 再看mytemp.html中,过滤器显示前2个单词,如下图:
<h1>{{name|filesizeformat}}</h1>
3.最后显示为:1kB
8.date
格式化时间输出,格式如下;
{{ time|date:"Y-m-d H:i:s" }} 或者 {{value | time}}
其中 Y-m-d H:i:s返回 年-月-日 小时:分钟:秒 的格式时间。如果time后面没有格式化参数,那么输出按照TIME_FORMAT中设置的进行。
1. 举例来说,将views.py文件中导入datetime模块:
from django.shortcuts import render
def mydef(request):
import datetime
now=datetime.datetime.now()
return render(request,"mytemp.html",{"time":now})
2. 再看mytemp.html中,使用date过滤器,如下图:
<h1>{{time|date}}</h1>
3. 看结果:
4. 如果mytemp.html中,date过滤器写成如下带参数的格式:
<h1>{{time|date:"Y-m-d H:i"}}</h1>
5.结果如下图:
9.safe
将字符串标记为安全,不需要转义。要保证 views.py 传过来的数据绝对安全,才能用 safe。和后端 views.py 的 mark_safe 效果相同。
Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
使用形式:{{value | safe}}
1. 举例来说,将views.py文件中导入datetime模块:
from django.shortcuts import render
def mydef(request):
views_str = "<a href='https://blog.csdn.net/weixin_42888180?spm=1000.2115.3001.5343/'>点击跳转</a>"
return render(request, "mytemp.html", {"views_str": views_str})
2. 再看mytemp.html中,使用safe过滤器,如下图:
<h1>{{views_str|safe}}</h1>
3. 看结果:
4.然后超链接点进去:会自然跳转到相关网站
5. 假如说没有这个safe过滤器,会显示如下: