测试开发之Django——No7.Django模板中的过滤器

时间:2021-07-28 10:21:26

1.add

将参数添加到值。

例如:

{{ value|add:"2" }}

如果value4,那么输出将是6

此过滤器将首先尝试将两个值强制转换为整数。如果失败,它将尝试将值一起添加到一起。这将适用于某些数据类型(字符串,列表等),而对其他数据类型则失败。如果失败,结果将为空字符串。

例如,如果我们有:

{{ first|add:second }}

first是与是,那么输出将是。[1, 2, 3]second[4, 5, 6][1, 2, 3, 4, 5, 6]

2.addslashes

在引号前添加斜杠。例如,用于转义CSV中的字符串很有用。

例如:

{{ value|addslashes }}

如果value是,输出将是 。"I'm using Django""I\'m using Django"

3.capfirst

将值的第一个字符大写。如果第一个字符不是字母,则此过滤器无效。

例如:

{{ value|capfirst }}

如果value"django",输出将是"Django"

4.center

将值置于给定宽度的字段中。

例如:

"{{ value|center:"15" }}"

如果value"Django",输出将是。"     Django    "

5.cut

从给定的字符串中删除arg的所有值。

例如:

{{ value|cut:" " }}

如果value是,输出将是 。"String with spaces""Stringwithspaces"

6.date

根据给定的格式格式化日期。

使用与PHP date()函数(https://php.net/date)类似的格式,但有一些差异。

可用格式字符串:

测试开发之Django——No7.Django模板中的过滤器

7.default

如果value的计算结果为False,则使用给定的默认值。否则,使用该值。

例如:

{{ value|default:"nothing" }}

如果value""(空字符串),则输出为nothing

8.default_if_none

如果(且仅当)值为None,则使用给定的默认值。否则,使用该值。

请注意,如果给出空字符串,则不会使用默认值。default如果要为空字符串回退,请使用过滤器。

例如:

{{ value|default_if_none:"nothing" }}

如果valueNone,输出将是nothing

9.dictsort

获取字典列表并返回按参数中给出的键排序的列表。

例如:

{{ value|dictsort:"name" }}

如果value是:

[
{'name': 'zed', 'age': 19},
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
]

然后输出将是:

[
{'name': 'amy', 'age': 22},
{'name': 'joe', 'age': 31},
{'name': 'zed', 'age': 19},
]

您还可以执行更复杂的操作,例如:

{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}

如果books是:

[
{'title': '1984', 'author': {'name': 'George', 'age': 45}},
{'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
{'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]

然后输出将是:

* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)

dictsort也可以按__getitem__()指定索引处的元素排序列表(或任何其他实现对象 )。例如:

{{ value|dictsort:0 }}

如果value是:

[
('a', '42'),
('c', 'string'),
('b', 'foo'),
]

然后输出将是:

[
('a', '42'),
('b', 'foo'),
('c', 'string'),
]

您必须将索引作为整数而不是字符串传递。以下产生空输出:

{{ values|dictsort:"0" }}

10.dictsortreversed

获取字典列表并返回按参数中给出的键以相反顺序排序的列表。这与上面的过滤器完全相同,但返回的值将按相反的顺序排列。

11.divisibleby

True如果值可以被参数整除,则返回。

例如:

{{ value|divisibleby:"3" }}

如果value21,输出将是True

12.escape

转义字符串的HTML。具体来说,它使这些替换:

  • < 转换为 &lt;
  • > 转换为 &gt;
  • ' (单引号)转换为 '
  • " (双引号)转换为 &quot;
  • & 转换为 &amp;

应用escape通常具有应用于结果的自动转义的变量只会导致进行一轮转义。因此,即使在自动转义环境中也可以安全地使用此功能。如果要应用多个转义传递,请使用force_escape过滤器。

例如,您可以escapeautoescape关闭时应用于字段:

{% autoescape off %}
{{ title|escape }}
{% endautoescape %}

13.escapejs

转义用于JavaScript字符串的字符。这并没有使字符串安全为HTML或JavaScript模板文字的使用,但使用模板来生成JavaScript / JSON什么时候保护你的语法错误。

例如:

{{ value|escapejs }}

如果value是,输出将是。"testing\r\njavascript \'string"<b>escaping</b>""testing\\u000D\\u000Ajavascript \\u0027string\\u0022\\u003Cb\\u003Eescaping\\u003C/b\\u003E"

14.filesizeformat

格式,如一个“人类可读”的文件大小的值(即, ,等等)。'13 KB''4.1 MB''102 bytes'

例如:

{{ value|filesizeformat }}

如果value是123456789,则输出为。117.7 MB

文件大小和SI单位

严格地说,filesizeformat当字节大小以1024的幂(这里是这种情况)计算时,不符合推荐使用KiB,MiB,GiB等的国际单位制。相反,Django使用与更常用的名称相对应的传统单元名称(KB,MB,GB等)。

15.first

返回列表中的第一个项目。

例如:

{{ value|first }}

如果value是列表,则输出将是。['a', 'b', 'c']'a'

16.floatformat

如果在没有参数的情况下使用,则将浮点数舍入到一个小数位 - 但前提是要显示小数部分。例如:

测试开发之Django——No7.Django模板中的过滤器

如果与数字整数参数一起使用,则将数字floatformat四舍五入到多个小数位。例如:

测试开发之Django——No7.Django模板中的过滤器

特别有用的是传递0(零)作为参数,它将浮点数舍入为最接近的整数。

测试开发之Django——No7.Django模板中的过滤器

如果传递给的参数floatformat为负数,它会将数字四舍五入到多个小数位 - 但只有在显示小数部分时才会这样。例如:

测试开发之Django——No7.Django模板中的过滤器

使用floatformat不带参数等效于使用floatformat 具有的参数-1

17.force_escape

将HTML转义应用于字符串(escape有关详细信息,请参阅过滤器)。此过滤器立即应用并返回一个新的转义字符串。这在极少数情况下非常有用,在这种情况下,您需要多次转义或希望将其他过滤器应用于转义结果。通常,您想使用escape过滤器。

例如,如果要捕获过滤器<p>创建的HTML元素linebreaks

{% autoescape off %}
{{ body|linebreaks|force_escape }}
{% endautoescape %}

18.get_digit

给定一个整数,返回请求的数字,其中1是最右边的数字,2是第二个最右边的数字,等等。返回无效输入的原始值(如果输入或参数不是整数,或者如果参数小于1)。否则,输出始终为整数。

例如:

{{ value|get_digit:"2" }}

如果value123456789,输出将是8

19.iriencode

将IRI(国际化资源标识符)转换为适合包含在URL中的字符串。如果您尝试在URL中使用包含非ASCII字符的字符串,则必须执行此操作。

在已经通过urlencode过滤器的字符串上使用此过滤器是安全的 。

例如:

{{ value|iriencode }}

如果value"?test=1&me=2",输出将是"?test=1&amp;me=2"

20.join

使用字符串连接列表,如Python str.join(list)

例如:

{{ value|join:" // " }}

如果value是列表,则输出将是字符串 。['a', 'b', 'c']"a // b // c"

21.last

返回列表中的最后一项。

例如:

{{ value|last }}

如果value是列表,则输出将是字符串。['a', 'b', 'c', 'd']"d"

22.length

返回值的长度。这适用于字符串和列表。

例如:

{{ value|length }}

如果value是或,输出将是 。['a', 'b', 'c', 'd']"abcd"4

过滤器返回0未定义的变量。

23.length_is

返回True如果值的长度为参数,或False以其他方式。

例如:

{{ value|length_is:"4" }}

如果value是或,输出将是 。['a', 'b', 'c', 'd']"abcd"True

24.linebreaks

用适当的HTML替换纯文本中的换行符; 单个换行符成为HTML换行符(),后面跟空行的换行符成为段落符号()。<br /></p>

例如:

{{ value|linebreaks }}

如果value是,输出将是。Joel\nis a slug<p>Joel<br />is a slug</p>

25.linebreaksbr

将一段纯文本中的所有换行转换为HTML换行符()。<br />

例如:

{{ value|linebreaksbr }}

如果value是,输出将是。Joel\nis a slugJoel<br />is a slug

26.linenumbers

显示带行号的文本。

例如:

{{ value|linenumbers }}

如果value是:

one
two
three

输出将是:

1. one
2. two
3. three

27.ljust

左对齐给定宽度的字段中的值。

参数:字段大小

例如:

"{{ value|ljust:"10" }}"

如果valueDjango,输出将是。"Django    "

28.lower

将字符串转换为全部小写。

例如:

{{ value|lower }}

如果value是,输出将是 。Totally LOVING this Album!totally loving this album!

29.make_list

返回变为列表的值。对于字符串,它是一个字符列表。对于整数,在创建列表之前将参数强制转换为字符串。

例如:

{{ value|make_list }}

如果value是字符串"Joel",则输出将是列表 。如果是,输出将是列表。['J', 'o', 'e','l']value123['1', '2', '3']

30.phone2numeric

将电话号码(可能包含字母)转换为其等效数字。

输入不必是有效的电话号码。这将很乐意转换任何字符串。

例如:

{{ value|phone2numeric }}

如果value800-COLLECT,输出将是800-2655328

31.pluralize

如果值不是1,则返回复数后缀。默认情况下,此后缀为 's'

例:

You have {{ num_messages }} message{{ num_messages|pluralize }}.

如果num_messages1,输出将是 如果是 输出将是You have 1 message.num_messages2You have 2messages.

对于需要后缀以外的单词's',您可以提供备用后缀作为过滤器的参数。

例:

You have {{ num_walruses }} walrus{{ num_walruses|pluralize:"es" }}.

对于不通过简单后缀复数的单词,您可以指定单数和复数后缀,用逗号分隔。

例:

You have {{ num_cherries }} cherr{{ num_cherries|pluralize:"y,ies" }}.

注意

使用blocktrans变复数翻译的字符串。

32.pprint

一个包装pprint.pprint()- 用于调试,真的。

33.random

返回给定列表中的随机项。

例如:

{{ value|random }}

如果value是列表,则输出可以是。['a', 'b', 'c', 'd']"b"

34.rjust

右对齐给定宽度的字段中的值。

参数:字段大小

例如:

"{{ value|rjust:"10" }}"

如果valueDjango,输出将是。"    Django"

35.safe

将字符串标记为在输出之前不需要进一步的HTML转义。当自动关闭时,此过滤器无效。

36.safeseq

safe过滤器应用于序列的每个元素。与在序列上运行的其他过滤器结合使用,例如 join。例如:

{{ some_list|safeseq|join:", " }}

safe在这种情况下,您无法直接使用过滤器,因为它首先将变量转换为字符串,而不是使用序列的各个元素。

37.slice

返回列表的切片。

使用与Python列表切片相同的语法。有关 介绍,请参见 http://www.diveintopython3.net/native-datatypes.html#slicinglists

例:

{{ some_list|slice:":2" }}

如果some_list是,输出将是。['a', 'b', 'c']['a', 'b']

38.slugify

转换为ASCII。将空格转换为连字符。删除不是字母数字,下划线或连字符的字符。转换为小写。还剥去前导和尾随空格。

例如:

{{ value|slugify }}

如果value是,输出将是。"Joel is a slug""joel-is-a-slug"

39.stringformat

根据参数(字符串格式说明符)格式化变量。此说明符使用printf样式的字符串格式语法,但删除前导“%”除外。

例如:

{{ value|stringformat:"E" }}

如果value10,输出将是1.000000E+01

40.striptags

尽一切努力去除所有[X] HTML标记。

例如:

{{ value|striptags }}

如果value是,输出将是。"<b>Joel</b> <button>is</button> a <span>slug</span>""Joel is aslug"

41.time

根据给定的格式格式化时间。

给定格式可以是预定义格式,也可以是TIME_FORMAT自定义格式,与date过滤器相同。请注意,预定义格式取决于区域设置。

例如:

{{ value|time:"H:i" }}

如果value相当于datetime.datetime.now(),则输出将是字符串"01:23"

另一个例子:

假设那USE_L10NTrueLANGUAGE_CODE,例如"de",那么:

{{ value|time:"TIME_FORMAT" }}

输出将是字符串"01:23"(Django随附"TIME_FORMAT"de语言环境的格式说明符"H:i")。

time过滤器将只接受格式字符串,涉及到一天的时间,而不是日期(原因很明显)参数。如果需要格式化date值,请改用date滤镜(或者time如果需要渲染完整datetime值,则使用滤镜 )。

有一个例外上面的规则:当传递一个datetime附带时区信息(价值时区感知的 datetime情况下)的time过滤器会接受时区相关的格式说明 'e''O''T''Z'

如果在没有格式字符串的情况下使用,TIME_FORMAT则使用格式说明符:

{{ value|time }}

是相同的:

{{ value|time:"TIME_FORMAT" }}

42.timesince

将日期格式化为该日期以来的时间(例如,“4天,6小时”)。

采用一个可选参数,该参数是一个包含用作比较点的日期的变量(没有参数,现在是比较点)。例如,如果blog_date是表示2006年6月1日午夜的日期实例,并且comment_date是2006年6月1日08:00的日期实例,则以下内容将返回“8小时”:

{{ blog_date|timesince:comment_date }}

比较offset-naive和offset-aware datetimes将返回一个空字符串。

分钟是使用的最小单位,并且对于将来相对于比较点的任何日期将返回“0分钟”。

43.timeuntil

类似于timesince,除了它测量从现在到给定日期或日期时间的时间。例如,如果今天是2006年6月1日并且conference_date是2006年6月29日举行的日期实例,那么 将返回“4周”。{{ conference_date|timeuntil }}

采用可选参数,该参数是包含用作比较点(而不是现在)的日期的变量。如果from_date包含2006年6月22日,则以下内容将返回“1周”:

{{ conference_date|timeuntil:from_date }}

比较offset-naive和offset-aware datetimes将返回一个空字符串。

分钟是使用的最小单位,并且对于过去相对于比较点的任何日期将返回“0分钟”。

44.title

通过使单词以大写字符开头而其余字符以小写字母开头,将字符串转换为标题。此标记不会将“琐碎的单词”保留为小写。

例如:

{{ value|title }}

如果value是,输出将是。"my FIRST post""My First Post"

45.truncatechars

如果字符串长于指定的字符数,则截断该字符串。截断的字符串将以可翻译的省略号序列(“...”)结束。

参数:要截断的字符数

例如:

{{ value|truncatechars:9 }}

如果value是,输出将是。"Joel is a slug""Joel i..."

46.truncatechars_html

类似于truncatechars,除了它知道HTML标签。字符串中打开但在截断点之前未关闭的任何标记在截断后立即关闭。

例如:

{{ value|truncatechars_html:9 }}

如果value是,输出将是 。"<p>Joel is a slug</p>""<p>Joel i...</p>"

将保留HTML内容中的换行符。

47.truncatewords

在一定数量的单词后截断一个字符串。

参数:要截断的单词数

例如:

{{ value|truncatewords:2 }}

如果value是,输出将是。"Joel is a slug""Joel is ..."

字符串中的换行符将被删除。

48.truncatewords_html

类似于truncatewords,除了它知道HTML标签。在截断点之前立即关闭在字符串中打开但在截断点之前未关闭的任何标记。

这效率低于truncatewords,因此只应在传递HTML文本时使用。

例如:

{{ value|truncatewords_html:2 }}

如果value是,输出将是 。"<p>Joel is a slug</p>""<p>Joel is ...</p>"

将保留HTML内容中的换行符。

49.unordered_list

递归地获取自嵌套列表并返回HTML无序列表 - 没有打开和关闭<ul>标记。

该列表被假定为正确的格式。例如,如果var 包含,则 返回:['States', ['Kansas', ['Lawrence','Topeka'], 'Illinois']]{{ var|unordered_list }}

<li>States
<ul>
<li>Kansas
<ul>
<li>Lawrence</li>
<li>Topeka</li>
</ul>
</li>
<li>Illinois</li>
</ul>
</li>

50.upper

将字符串转换为全部大写。

例如:

{{ value|upper }}

如果value是,输出将是。"Joel is a slug""JOEL IS A SLUG"

51.urlencode

转义值以在URL中使用。

例如:

{{ value|urlencode }}

如果value"https://www.example.org/foo?a=b&c=d",输出将是"https%3A//www.example.org/foo%3Fa%3Db%26c%3Dd"

可以提供包含不应转义的字符的可选参数。

如果未提供,则假定'/'字符是安全的。当应该转义所有字符时,可以提供空字符串。例如:

{{ value|urlencode:"" }}

如果value"https://www.example.org/",输出将是 "https%3A%2F%2Fwww.example.org%2F"

52.urlize

将文本中的URL和电子邮件地址转换为可单击的链接。

这个模板标签适用于前缀链接http://https://或 www.。例如,https://goo.gl/aia1t将被转换,但goo.gl/aia1t不会。

它还支持在原有的*域名之一(网域内的链接结束.com.edu.gov.int.mil.net,和 .org)。例如,djangoproject.com转换。

链接可以有尾随标点符号(句点,逗号,近距离标记)和标点符号(开放标准),并且urlize仍然会做正确的事情。

通过生成的链接urlize有一个rel="nofollow"属性添加到他们。

例如:

{{ value|urlize }}

如果value是,输出将是 。"Check out www.djangoproject.com""Check out <ahref="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>"

除了网络链接,urlize还可以将电子邮件地址转换为 mailto:链接。如果value是 ,输出将是 。"Send questionsto foo@example.com""Send questions to <ahref="mailto:foo@example.com">foo@example.com</a>"

urlize过滤器有一个可选的参数autoescape。如果 autoescapeTrue,链接文本和URL将使用Django的内置escape过滤器进行转义。autoescapeis 的默认值 True

注意

如果urlize应用于已包含HTML标记的文本,则事情将无法按预期工作。仅将此过滤器应用于纯文本。

53.urlizetrunc

将URL和电子邮件地址转换为可点击的链接,就像urlize一样,但会截断超过给定字符限制的URL。

参数:链接文本的字符数应截断为,包括在需要截断时添加的省略号。

例如:

{{ value|urlizetrunc:15 }}

如果value是,输出将是 。"Check out www.djangoproject.com"'Check out <ahref="http://www.djangoproject.com" rel="nofollow">www.djangopr...</a>'

urlize一样,此过滤器应仅应用于纯文本。

54.wordcount

返回单词数。

例如:

{{ value|wordcount }}

如果value是,输出将是。"Joel is a slug"4

55.wordwrap

在指定的行长度处包装单词。

参数:包装文本的字符数

例如:

{{ value|wordwrap:5 }}

如果value是,输出将是:Joel is a slug

Joel
is a
slug

56.yesno

地图值TrueFalse和(可选地)None,以把面条的“是”,“否”,“也许”,或自定义映射作为逗号分隔的列表通过,并返回根据值的那些字符串之一:

例如:

{{ value|yesno:"yeah,no,maybe" }}

57.get_static_prefix

您应该更喜欢static模板标记,但如果您需要更多地控制STATIC_URL注入模板的确切位置和方式,则可以使用get_static_prefix模板标记:

{% load static %}
<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />

如果您多次需要该值,还可以使用第二种形式来避免额外处理:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %} <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
<img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />

58.get_media_prefix

与之类似get_static_prefixget_media_prefix使用媒体前缀填充模板变量MEDIA_URL,例如:

{% load static %}
<body data-media-url="{% get_media_prefix %}">