Django内置模版过滤器

Django内置过滤器总览

能够查询下表来总览Django的内置过滤器:javascript

过滤器 说明
add 加法
addslashes 添加斜杠
capfirst 首字母大写
center 文本居中
cut 切除字符
date 日期格式化
default 设置默认值
default_if_none 为None设置默认值
dictsort 字典排序
dictsortreversed 字典反向排序
divisibleby 整除判断
escape 转义
escapejs 转义js代码
filesizeformat 文件尺寸人性化显示
first 第一个元素
floatformat 浮点数格式化
force_escape 强制马上转义
get_digit 获取数字
iriencode 转换IRI
join 字符列表连接
last 最后一个
length 长度
length_is 长度等于
linebreaks 行转换
linebreaksbr 行转换
linenumbers 行号
ljust 左对齐
lower 小写
make_list 分割成字符列表
phone2numeric 电话号码
pluralize 复数形式
pprint 调试
random 随机获取
rjust 右对齐
safe 安全确认
safeseq 列表安全确认
slice 切片
slugify 转换成ASCII
stringformat 字符串格式化
striptags 去除HTML中的标签
time 时间格式化
timesince 从什么时候开始
timeuntil 到什么时候多久
title 全部单词首字母大写
truncatechars 截断字符
truncatechars_html 截断字符
truncatewords 截断单词
truncatewords_html 截断单词
unordered_list 无序列表
upper 大写
urlencode 转义url
urlize url转成可点击的连接
urlizetrunc urlize的截断方式
wordcount 单词计数
wordwrap 单词包裹
yesno 将True,False和None,映射成字符串‘yes’,‘no’,‘maybe’

为模版过滤器提供参数的方式是:过滤器后加个冒号,再紧跟参数,中间不能有空格!css

目前只能为过滤器最多提供一个参数!html

1. add

把add后的参数加给value。像这样:java

{{ value|add:"2" }}

若是value为 4,则会输出6.git

过滤器首先会强制把两个值转换成Int类型。 若是强制转换失败, 它会试图使用各类方式把两个值相加。django

对于下面的例子:api

{{ first|add:second }}

若是first是[1, 2, 3],second是[4, 5, 6], 将会输出[1, 2, 3, 4, 5, 6].安全

2. addslashes

在引号前面加上斜杆。经常使用于在CSV中转义字符串。像这样:dom

{{ value|addslashes }}

若是value是"I'm using Django", 输出将变成 "I\'m using Django".post

3. capfirst

大写变量的第一个字母。 若是第一个字符不是字母,该过滤器将不会生效。

{{ value|capfirst }}

若是value是"django", 输出将变成"Django"。

4. center

在给定的宽度范围内居中.

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

若是value是"Django",输出将是Django

5. cut

移除value中全部的与给定参数相同的字符串。

{{ value|cut:" " }}

若是value为“String with spaces”,输出将为"Stringwithspaces"。

6. date

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

可用的格式字符串:

格式化字符 描述 示例输出
a 'a.m.'或'p.m.' 'a.m.'
A 'AM'或'PM' 'AM'
b 月份,文字形式,3个字母,小写。 “jan”
B 未实现。  
c ISO 8601格式 2008-01-02T10:30:00.000123+02:00
d 月的日子,带前导零的2位数字。 '01'到'31'
D 周几的文字表述形式,3个字母。 'Fri'
e 时区名称 '','GMT','-500','US/Eastern'等
E 月份,分地区。  
f 时间 '1','1:30'
F 月,文字形式。 'January'
g 12小时格式,无前导零。 '1'到'12'
G 24小时格式,无前导零。 '0'到'23'
h 12小时格式。 '01'到'12'
H 24小时格式。 '00'到'23'
i 分钟 '00'到'59'
I 夏令时间,不管是否生效。 '1'或'0'
j 没有前导零的月份的日子。 '1'到'31'
l 星期几,完整英文名 'Friday'
L 布尔值是不是一个闰年。 True或False
m 月,2位数字带前导零。 '01'到'12'
M 月,文字,3个字母。 “Jan”
n 月无前导零。 '1'到'12'
N 美联社风格的月份缩写。 'Jan.','Feb.','March','May'
o ISO-8601周编号 '1999'
O 与格林威治时间的差,单位小时。 '+0200'
P 时间为12小时 '1 am','1:30 pm','midnight','noon','12:30 pm'>
r RFC 5322格式化日期。 'Thu, 21 Dec 2000 16:01:07 +0200'
s 秒,带前导零的2位数字。 '00'到'59'
S 一个月的英文序数后缀,2个字符。 'st','nd','rd'或'th'
t 给定月份的天数。 28 to 31
T 本机的时区。 'EST','MDT'
u 微秒。 000000 to 999999
U 自Unix Epoch以来的秒数(1970年1月1日00:00:00 UTC)。  
w 星期几,数字无前导零。 '0'(星期日)至'6'(星期六)
W ISO-8601周数,周数从星期一开始。 1,53
y 年份,2位数字。 '99'
Y 年,4位数。 '1999'
z 一年中的日子 0到365
Z 时区偏移量,单位为秒。 -43200到43200

范例:

{{ value|date:"D d M Y" }}

若是value是一个datetime对象,好比datetime.datetime.now(),输出将是字符串'Wed 09 Jan 2008'。

能够将date与time过滤器结合使用,以呈现datetime值的完整表示形式。 例如。:

{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}

7. default

为变量提供一个默认值。

{{ value|default:"nothing" }}

8. default_if_none

若是(且仅当)value为None,则使用给定的默认值。

{{ value|default_if_none:"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也能够按指定索引对多维列表进行排序,像这样:

{{ value|dictsort:0 }}

若是value为:

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

那么输出将是:

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

必须提供整数索引,不能是字符串。 如下产生空输出:

{{ values|dictsort:"0" }}

10. dictsortreversed

前面过滤器的反序功能。

11. divisibleby

若是value能够被参数整除,则返回True。

{{ value|divisibleby:"3" }}

若是value是21,则输出True。

12. escape

转义字符串的HTML。

转义仅在字符串输出时应用,所以在连接的过滤器序列中escape的位置可有可无,就像它是最后一个过滤器。 若是要当即应用转义,请使用force_escape过滤器。

13. escapejs

转义用于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。

15. first

返回列表中的第一项。

{{ value|first }}

若是value是列表['a', 'b', 'c'] ,输出将为'a'。

16. floatformat

当不使用参数时,将浮点数舍入到小数点后一位,但前提是要显示小数部分。 像这样:

value           模板语法                输出
34.23234 {{ value | floatformat }} 34.2 34.00000 {{ value | floatformat }} 34 34.26000 {{ value | floatformat }} 34.3 

若是与数字整数参数一块儿使用,将数字四舍五入为小数位数。 像这样:

value           模板语法                输出
34.23234 {{ value | floatformat3 }} 34.232 34.00000 {{ value | floatformat3 }} 34.000 34.26000 {{ value | floatformat3 }} 34.260 

特别有用的是传递0(零)做为参数,它将使float浮动到最接近的整数。

value           模板语法                输出
34.23234 {{ value | floatformat:“0}} 34 34.00000 {{ value | floatformat:“0}} 34 39.56000 {{ value | floatformat:“0}} 40 

若是传递给floatformat的参数为负,则会将一个数字四舍五入到小数点后的位置,但前提是要显示一个小数部分。 像这样:

value           模板语法                输出
34.23234 {{ value | floatformat:“ - 3}} 34.232 34.00000 {{ value | floatformat:“ - 3}} 34 34.26000 {{ value | floatformat:“ - 3}} 34.260 

17. force_escape

当即转义HTML字符串。

18. get_digit

给定一个整数,返回所请求的数字,1表示最右边的数字,2表示第二个最右边的数字,以此类推。

{{ value|get_digit:"2" }}

若是value为123456789,则输出8。

19. iriencode

将IRI(国际化资源标识符)转换为适合包含在URL中的字符串。

{{ 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

返回列表中的最后一个项目。相似first过滤器。

{{ value|last }}

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

替换纯文本中的换行符为<p>标签。

{{ value|linebreaks }}

若是value是Joel\nis a slug,输出将为<p>Joel<br />is a slug</p>

25. linebreaksbr

替换纯文本中的换行符为<br />标签。

{{ value|linebreaksbr }}

若是value是Joel\nis a slug,输出将为Joel<br />is a slug

26. linenumbers

显示带行号的文本。

{{ value|linenumbers }}

若是value为:

one
two
three

输出将是:

1. one
2. two
3. three

27. ljust

给定宽度下左对齐。

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

若是value为Django,则输出为Django

28. lower

将字符串转换为所有小写。

{{ value|lower }}

29. make_list

将对象转换为字符的列表。对于字符串,直接拆分为单个字符的列表。对于整数,在建立列表以前将参数强制转换为unicode字符串。

{{ value|make_list }}

若是value是字符串"Joel",输出将是列表['J', 'o' , 'e', 'l']。

若是value为123,输出为列表['1', '2', '3']。

30. phone2numeric

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

{{ value|phone2numeric }}

若是value为800-COLLECT,输出将为800-2655328。

31. pluralize

若是值不是1,则返回一个复数形式,一般在后面添加's'表示。

例如:

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

若是num_messages是1,则输出为You have 1 message。 若是num_messages是2,输出为You have 2 messages

另外若是须要的不是's'后缀的话, 能够提供一个备选的参数给过滤器:

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

对于非通常形式的复数,能够同时指定单复数形式,用逗号隔开。例如:

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

32. pprint

用于调试的过滤器。

33. random

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

{{ value|random }}

34. rjust

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

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

35. safe

将字符串标记为安全,不须要转义。再也不赘述。

36. safeseq

将safe过滤器应用于序列的每一个元素。 与对序列进行其余过滤操做(例如join)一块儿使用时很是有用。

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

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

37. slice

返回列表的一部分。也就是切片,与Python的列表切片相同的语法。

{{ 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

根据参数,格式化变量。

{{ value|stringformat:"E" }}

若是value为10,输出将为1.000000E+01。

40. striptags

尽量的去除HTML中的标签。

{{ value|striptags }}

若是value是<b>Joel</b> <button>is</button> a <span>slug</span>,输出Joel is a slug

41. time

根据给定的格式,格式化时间。给定格式能够是预约义的TIME_FORMAT,也能够是与date过滤器相同的自定义格式。

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

若是value等于datetime.datetime.now(),则输出字符串01:23

time过滤器只接受格式字符串中与时间相关的参数,而不是日期。若是须要格式化date值,请改用date过滤器。

42. timesince

将日期格式设为自该日期起的时间(例如,“4天,6小时”)。

采用一个可选参数,它是一个包含用做比较点的日期的变量。例如,若是blog_date是表示2006年6月1日午夜的日期实例,而且comment_date是2006年6月1日08:00,则如下将返回“8 hours”:

{{ blog_date|timesince:comment_date }}

43. timeuntil

相似于timesince,它测量从如今开始直到给定日期或日期时间的时间。例如,若是今天是2006年6月1日,而conference_date是2006年6月29日,则{{ conference_date | timeuntil }}将返回“4 weeks”。

可选参数是一个包含用做比较点的日期变量。若是from_date为2006年6月22日,则如下内容将返回“1 weeks”:

{{ conference_date|timeuntil:from_date }}

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>

47. truncatewords

在必定数量的字数后截断字符串。与truncatechars不一样的是,这个以字的个数计数,而不是字符计数。

{{ value|truncatewords:2 }}

若是value 是Joel is a slug, 输出为Joel is ...

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

48. truncatewords_html

相似于truncatewords,可是保留HTML标记。

{{ value|truncatewords_html:2 }}

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 }}

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

52. urlize

将文字中的网址和电子邮件地址转换为可点击的连接。

该模板标签适用于前缀为http://https://的连接,或者www

由urlize生成的连接会向其中添加rel="nofollow"属性。

{{ value|urlize }}

若是value是Check out www.djangoproject.com,输出Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangoproject.com</a>

除了超级连接以外,urlize也会将电子邮件地址转换为邮件地址连接。 若是value是Send questions to foo@example.com,输出将是Send questions to <a href="mailto:foo@example.com">foo@example.com</a>

53. urlizetrunc

将网址和电子邮件地址转换为可点击的连接,就像urlize,但截断长度超过给定字符数限制的网址。

{{ value|urlizetrunc:15 }}

若是value是Check out www.djangoproject.com,将输出Check out <a href="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

将True,False和None,映射成字符串‘yes’,‘no’,‘maybe’。

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

国际化标签和过滤器

Django还提供了一些模板标签和过滤器,用以控制模板中国际化的每一个方面。它们容许对翻译,格式化和时区转换进行粒度控制。

1. i18n

此标签容许在模板中指定可翻译文本。要启用它,请将USE_I18N设置为True,而后加载{% load i18n %}

2. l10n

此标签提供对模板的本地化控制,只须要使用{% load l10n %}。一般将USE_L10N设置为True,以便本地化默认处于活动状态。

3. tz

此标签对模板中的时区进行控制。 像l10n,只须要使用{% load tz },但一般还会将USE_TZ设置为True,以便默认状况下转换为本地时间。

其余标签和过滤器库

Django附带了一些其余模板标签,必须在INSTALLED_APPS设置中显式启用,并在模板中启用{% load %}标记。

1. django.contrib.humanize

一组Django模板过滤器,用于向数据添加“人性化”,更加可读。

2. static

static标签用于连接保存在STATIC_ROOT中的静态文件。例如:

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

还可使用变量:

{% load static %}
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen" />

还能够像下面这么使用:

{% load static %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}"></img>
相关文章
相关标签/搜索