文章对应的B站视频:https://www.bilibili.com/video/BV1Tu41127Ca/

Django系列文章对应的目录:

 

过滤器

用在模板文件(如 html 文件)中。

模板语法:

{{ 变量名 | 过滤器:可选参数 }}

 

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符(|),如下所示:

{{ name|lower }}

{{ name }} 变量被过滤器 lower 处理后,大写转换为小写。

 

过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:

{{ my_list|first|upper }}

以上实例取第一个元素(或第一个字符),并且转化为大写。

 

有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:

{{ bio|truncatewords:"30" }}

这个将显示变量 bio 的前30个词。

 

其他过滤器:

  • addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
  • date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,实例:
{{ pub_date|date:"F j, Y" }}
  • length : 返回变量的长度。

default

default 为变量提供一个默认值。

如果 views 传的变量的布尔值是 false,则使用指定的默认值。

以下值为 false:

0  0.0  False  0j  ""  []  ()  set()  {}  None

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    name =0
    return render(request, "mytemp.html", {"name": name})

mysite456/templates/mytemp.html 文件代码:

{{ name|default:"简单示例demo666" }}

 

再次访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_django

 

 

length

返回对象的长度,适用于字符串和列表。

字典返回的是键值对的数量,集合返回的是去重后的长度。

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    name ="简单示例demo"
    return render(request, "mytemp.html", {"name": name})

mysite456/templates/mytemp.html 文件代码:

{{ name|length}}

再次访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_django_02

 

 

filesizeformat

以更易读的方式显示文件的大小(即'13 KB', '4.1 MB', '102 bytes'等)。

字典返回的是键值对的数量,集合返回的是去重后的长度。

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    num=1024
    return render(request, "mytemp.html", {"num": num})

mysite456/templates/mytemp.html 文件代码:

{{ num|filesizeformat}}

 再次访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_html_03

 

 

date

根据给定格式对一个日期变量进行格式化。

格式 Y-m-d H:i:s返回 年-月-日 小时:分钟:秒 的格式时间。

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    import datetime
    now  =datetime.datetime.now()
    return render(request, "mytemp.html", {"time": now})

mysite456/templates/mytemp.html 文件代码:

{{ time|date:"Y-m-d" }}

再次访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_django_04

 

truncatechars

如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。

截断的字符串将以 ... 结尾。

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    views_str = "简单示例demo"
    return render(request, "mytemp.html", {"views_str": views_str})

mysite456/templates/mytemp.html 文件代码:

{{ views_str|truncatechars:2}}

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_html_05

 

safe

将字符串标记为安全,不需要转义。

要保证 views.py 传过来的数据绝对安全,才能用 safe。

和后端 views.py 的 mark_safe 效果相同。

Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    views_str = "<a href=''>点击跳转</a>"
    return render(request, "mytemp.html", {"views_str": views_str})

mysite456/templates/mytemp.html 文件代码:

{{ views_str|safe }}

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

Django 模板标签(过滤器)_html_06

 

 

REF

https://www.runoob.com/django/django-template.html