前言 |
- 基本环境
- Django版本:1.11.8
- Python版本:3.6
- OS: win10 x64
- 本文摘要
- 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能、语法、代码和效果示例。
- 本文完整项目文件代码下载地址:完整示例
- Django完整内置过滤器帮助文档:Django内置过滤器完整版
- 参考文献:Django 中文文档 1.8
内置过滤器 |
注意:所有带参数的过滤器,在使用时,冒号:和参数中间不能有空格。
add加
-
功能:
把add后的参数num加给value;
数字相加会进行算术相加;
字符串会被拼接。 -
语法:
{{ value|add:"num" }} -
示例效果:
1、数字相加
2、字符串相加
join连接
- 功能:
以指定字符串str连接列表list中的元素,与python中的str.join(list)相似; - 语法
{{ value|join }}
- 示例效果:
使用"// "连接列表,
{{ value|join:" // " }}
。
addslashes在引号前加斜杠
- 功能:
在引号前面加上斜杆。例如,用于在CSV中转义字符串。 - 语法:
{{ value|addslashes }}
如果value是"I'm using?Django",输出将变成"I'm using Django". - 示例效果:
地址栏中的 %20表示空格;
capfirst首字母大写
- 功能:
大写变量的第一个字母。如果第一个字符不是字母,则该过滤器不会生效。 - 语法:
{{ value | capfirst }}
- 示例效果:
title首字母大写
- 功能:
大写字符串中单词的第一个字母。如果第一个字符不是字母,则该过滤器不会生效。 - 语法:
{{ value | title}}
- 示例效果:
当单词“1good”并不是以字母开头时,title过滤器失效。
- 拓展:
- upper大写过滤器,将所有字母都大写,
{{ value | upper}}
- lower大写过滤器,将所有字母都小写,
{{ value | lower}}
- upper大写过滤器,将所有字母都大写,
cut切割指定字符
- 功能:
移除value中所有的与给出的变量相同的字符。 - 语法:
{{ value|cut:"str" }}
;str为指定移除字符。 - 示例效果:
length求字符串或列表长度
-
功能:
返回字符串或列表长度; -
语法:
{{ value|length}}
-
示例效果:
- 拓展:
- length_is,若value的长度与width相等,则返回True;否则,返回False。
{{ value|length_is:"width" }}
- length_is,若value的长度与width相等,则返回True;否则,返回False。
linenumbers换行加行号
- 功能:
当文本为多行时,为每行添加行号。返回的文本可能是一行,可以同时使用linebreaksbr换行。 - 语法:
{{ value|linenumbers }}
- 示例效果:
这里使用value='a b c',为了防止浏览器解析为一行,这里使用linebreaksbr过滤器进行换行。
{{ value|linenumbers|linebreaksbr }}
- 拓展:
- linebreaksbr是一个换行过滤器,语法为:
{{ value|linebreaksbr }}
,它替换字符串中所有的“ ”为“
”; - 例如, 。
- linebreak也是一个换行过滤器,语法为:
{{ value|linebreak }}
,它替换字符串中所有的“ ”为<br />
,新形成的新行使用段落标签<p></p>
包含。 - 例如, "Joel
is a slug"会被转换为
<p>Joel<br />is a slug</p>
。
- linebreaksbr是一个换行过滤器,语法为:
date日期
- 功能:
根据给定格式,对一个date变量进行格式化。 - 语法:
{{ value|date:"D d M Y" }}
- 也可以不使用格式字符串,
{{ value|date }}
- 也可以不使用格式字符串,
- 如果value是datetime对象
如,datetime.datetime.now(),将输出字符串'Web 09 Jan 2008'。 - 传递的时间格式也可以是预定义的格式:
- DATE_FORMAT
- DATETIME_FORMAT
- SHORT_DATE_FORMAT
- SHORT_DATET
- 预定义的格式根于语言环境不同而有所不同。
- 示例效果:
这里使用datetime模块中的datetime.now()函数返回时间元组,将时间元组赋值给变量value;date过滤器不使用参数,采用默认参数。
# views.py文件中
def filter_Test(request, value):
# 参数value
from datetime import datetime
value = datetime.now()
return render(request, 'filterTest.html', {'value': value})
default默认
-
功能:
如果value的计算结果为False,则使用给定的默认值;否则,使用该value值。 -
语法:
{{ value|default:"指定默认内容" }}
-
value为""(空字符串)或None
{{ value|default:"nothing" }}
输出为nothing。 -
示例效果:
-
url方法
参见:利用Django中的url方法实现地址动态拼接自动生成超链接地址
dictsort字典排序
- 功能:
接收一个字典列表,并返回按参数中给出的键排序后的列表; - 语法:
{{ value|dictsort:'key' }}
#如果value为
[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
# 则经过dictsort根据键name排序后为
# {{ value|dictsort:'name' }}
[
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
{'name': 'zed', 'age': 19},
]
- 示例效果
# 在views.py文件中
## 内置过滤器dictsort测试专用
def filter_Test(request, value):
# 参数value,传值给语法中的value
value = [
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
return render(request, 'filterTest.html', {'value': value})
- 示例效果:
可以看出,字典列表已经根据name键排序。
dictsortreversed字典逆排序
- 功能:
接收一个字典列表,并返回按照参数中给出的键按相反顺序排序的列表;这与上面的过滤器完全相同,但返回的值将是相反的顺序。 - 语法:
{{ value|dictsortreversed:'key' }}
#如果value为
[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]
# 则经过disort根据键name排序后为
# {{ value|dictsortreversed:'name' }}
[
{'name': 'zed', 'age': 19},
{'name': 'joe', 'age': 31},
{'name': 'amy', 'age': 22},
]
- 示例效果:
前面使用name,这里使用age
从结果上看,字典列表按照age键进行逆排序。
center字符串居中
-
功能:
在给定字符串宽度中,让字符串居中显示; -
语法:
{{ value|center:'width' }}
- 例如:
{{ "walt"|center:'10' }}
;则结果为
"☐☐☐walt☐☐☐",☐为空格。
-
示例效果:
- 拓展:
此外还有ljust左对齐和rjust右对齐方法,类似center。
escape转义用于HTML的字符代码
- 功能:
将HTML能识别到的符号转换为HTML字符代码。 - 语法:
{{ value|escape }}
- 该部分未实验成功,待更新。
escapejs转义用于JavaScript字符串的字符
-
功能:
转义用于JavaScript字符串的字符。虽然这在HTML中是不安全的,但可以确保在使用模板生成JavaScript/JSON时避免语法错误。 -
语法:
{{ value|escapejs }}
-
示例效果:
floatformat格式化显示浮点数
- 功能:
根据参数控制浮点数的格式化显示,舍去位数采用四舍五入。 - 语法:
{{ value|floatformat:dotWidth }}
- 参数dotWidth指定了浮点数显示的位数;
- dotWidth默认为-1,其中负号表示当value小数点后都是0时,只显示整数部分;1表示当value小数点后有至少1位非零数时,只保留1位小数;
- dotWidth=num,且num>0,其中表示不管value小数点后有没有非零数,保留num位小数;
- dotWidth=num,且num<0,其中负号表示当value小数点后都是0时,只显示整数部分;1表示当value小数点后有至少1位非零数时,保留num位小数。
- 示例效果:
浮点数的小数点后全是0
浮点数的小数点后有非零值
safe安全模式
- 功能:
将字符串标记为在输出之前不需要进一步的HTML转义。当自动转义关闭时,此过滤器不起作用。 - 语法:
{{ value|safe }}
- 示例效果:
总结 |
- 本文完整项目文件代码下载地址: 完整示例
- Django完整内置过滤器帮助文档:Django内置过滤器完整
- 参考文献:Django 中文文档 1.8
- 能力有限,欢迎指错交流;