内置标签和过滤器

  • 1.内置标签 一览
    • autoescape
    • block
    • comment
    • csrf_token
    • cycle
    • debug
    • extends
    • filter(标签filter而不是过滤器filter)
    • firstof
    • for
    • for … empty
    • if
    • ifequal 和 ifnotequal
    • ifchanged (翻译完也没懂它的作用,请自己找例子理解)
    • include
    • load
    • lorem
    • now
    • regroup
    • resetcycle
    • templatetag
    • url
    • verbatim
    • widthratio
    • with
  • 2.内置过滤器 一览
    • addslashes
    • capfirst
    • center
    • cut
    • date
    • default
    • default_if_none
    • dictsort
    • dictsortreversed
    • divisibleby
    • escape
    • escapejs
    • filesizeformat
    • first
    • floatformat
    • force_escape
    • get_digit
    • iriencode
    • join
    • json_script
    • last
    • length
    • length_is
    • linebreaks
    • linebreaksbr
    • linenumbers
    • ljust
    • lower
    • make_list
    • phone2numeric
    • pluralize
    • pprint
    • random
    • rjust
    • safeseq
    • slice
    • slugify
    • stringformat
    • striptags
    • time
    • timesince
    • timeuntil
    • title
    • truncatechars
    • truncatechars_html
    • truncatewords
    • truncatewords_html
    • unordered_list
    • upper
    • urlencode
    • urlize
    • urlizetrunc
    • wordcount
    • wordwrap
    • yesno
  • 3.国际化标签和过滤器
    • i18n
    • i18n
    • tz
  • 4.其他标签和过滤器库
    • static
    • get_static_prefix
    • get_media_prefix

- - 译自官方文档 --
内置标签和过滤器(tag&filter)
本节讲述Django的内置模板 标签和过滤器.如果可以建议你使用 automatic documentation,因为它包含了如何自定义标签和过滤器.

1.内置标签 一览

autoescape

功能: 控制某一范围内的html代码是否需要转义.
参数: on(转义) 和 off(不转义),这两个参数决定了在其控制范围内的html代码是否需要转义. 控制范围由 endautoescape 结束.不转义的结果是HTML代码会被渲染。

当参数设置为on,范围内的html代码在输出到页面前都会被转义(先走filter再转义). 它实现的功能和你在变量上面使用过滤器 escape 是一样的.
例外的情况是 变量已经使用了safe/escape过滤器进行转义或者对代码做了处理或者(此句翻译可能有问题,原文: The only exceptions are variables that are already marked as “safe” from escaping, either by the code that populated the variable, or because it has had the safe or escape filters applied.)
例子:

block

功能: 定义了一部分区域,此区域可以被子模版重写. 详情见 模板继承

comment

功能: 忽略 {% comment %} and {% endcomment %}之间的内容,起到一个注释的作用. 可以在标签后面使用双引号留下注释说明, comment 标签不能嵌套使用,否则报500错误
例子:

csrf_token

此标签用于CSRF(跨站请求伪造)的保护,常在form表单中使用,关于CSRF请见 Cross Site Request Forgeries.

cycle

功能: 对cycle的 参数列表 进行轮询
参数: 可以是string字符串或模板变量
这个标签在循环中有用:

      假设 somelist 中有1,2,3,4,5,那么循环到1,cycle=‘row1’; 循环到2,cycle=‘row2’; 循环到3,cycle=‘row1’;长此以往,直到列表循环结束.你也可以给cycle传递模板变量变量, 假如你有两个变量rowvalue1 和 rowvalue2, 你可以让它们两个交替被获取:

cycle中的模板变量会自动被转义,你可以使用上面的autoescape标签去掉转义:

参数可以是string或模板变量混用(string中的内容不会被自动转义):

有时候你想在cycle参数跳到下一个之前,使用该参数. 可以这么做, 使用as给cycle标签参数一个可以引用的别名,比如rowcolors.

       这样一来,在参数跳变之前,你可以使用{{rowcolors}}这个变量了;在当前循环中,如果你想自己跳变到下一个参数可以这样做 {% cycle rowcolors %},如此一来,rowcolors的值就会变为row2,从而达到提前跳变的目的.
例子:

输出:

        在cycle标签中你可以提供n个参数(空格分开),string参数可以用单引号或双引号引起,如果不是string就会被当作模板变量来处理.默认情况下,当你使用了as提供别名,包含{% cycle %}的地方就会触发第一个参数被使用的情况.如果你想在嵌套循环或include一个模板中使用这个cycle,就会出现第一次使用却拿到第二个参数的情况,为解决这种定义就被使用的情况,达到一种先定义后使用的目的。在别名后面添加一个silent关键字.例如:

        当声明了silent关键字的时候,后续的{% cycle %}标签都会自带silent属性,这意味着{%cycle 别名%}的结果为空.尽管第二次调用cycle标签,下面的例子输出还是为空:

你可以使用resetcycle标签让一个cycle标签在下一次循环中重新从第一个参数开始轮询.

debug

功能: 输出一堆debug信息, 包含当前页内容和导入的所有模块信息.(容易浏览器崩溃)

extends

功能:声明一个模板继承自父类模板
两种使用方法:
1 {% extends “base.html” %} 引号引起要继承的父类模板名字"base.html"(确保路径加载正确).
2 {% extends variable %} 使用 variable变量的值. 如果变量的值是字符串,同上一个方法; 如果变量是一个 Template 对象, Django 将会使用这个对象作为父模板. 更多详情见Template inheritance.

通常,父类模板的名字都是一个template文件夹下子文件(也就是一个相对路径).通常以./或…/开头. 例如,有如下的目录结构:

在template.html文件中, 如下路径引用是正确的:

filter(标签filter而不是过滤器filter)

功能: 将一块内容使用多个过滤器进行处理.多个过滤器可以用 | 连接,过滤器还可以提供参数,就像变量的语法那样 .
注意: 一块内容是指包含在 filter标签 和 endfilter 标签之间的所有内容.

实例说明:

firstof

功能:输出第一个非 False(0,’’,False,null)的参数的值.
使用方法: {% firstof var1 var2 var3 %}
等价于:

为了避免所有都是False,你可以在最后传一个string (这些变量上都可以使用过滤器filter):
{% firstof var1 var2 var3 "fallback value" %}
你可以用 “as 别名” 来存储输出结果,如:
{% firstof var1 var2 var3 as value %}.

for

功能: 循环数组中的每一项,每项都会以文本形式输出.例如,为了显示运动员列表 athlete_list中的每个运动员:

你可以使用 reversed语法 ,让列表反转过{% for obj in list reversed %}.

      如果你想循环一个包含了列表的列表,你可以为内层每个列表中的每个对象分配一个名字. 例如,你的points列表内容是一些点(x,y), 你可以用如下方式输出每个点的x,y:

如果你要处理一个 字典对象,这种方法很好用.例如,你要输出字典的键值对:

注意事项:(python语法相关)请注意点操作, 字典中键的查找优先于方法的查找.因此如果 data 字典中有一个键的名字叫做 ‘items’, data.items 将会返回 data[‘items’]的值 而不是 data.items()方法的返回值. 为了避免你使用字典类内的关键字,请不要使用这些名称来定义键 (items, values, keys, etc.). 获取更多点操作的查找顺序,请见 documentation of template variables.

Django 为for 循环定义了一些内置变量供你使用:

for … empty

功能:如果for循环的列表是空 或者 列表变量不存在,会执行{% empty %}里面的内容:

上面的更简洁也可能更快,下面的是等价写法:

if

功能: 判断一个变量,如果是true(不为空,不是false)就会执行 if 块里面的内容:

      如果上面的运动员列表athlete_list 不为空,运动员的个数 {{ athlete_list|length }} 就会显示出来.
如上所示,if标签块内可以使用 {% elif %}或 {% else %},其作用不言而喻.

Boolean operators
if标签可以使用 and, or, not 去测试变量的值,进而进行不同的操作:

同一个if 标签内可以同时使用and和or操作符,and优先级更高,例如.:
{% if athlete_list and coach_list or cheerleader_list %}
上面内容将会被Django解释成:
if (athlete_list and coach_list) or cheerleader_list
if标签内使用圆括号是非法的,你可以用嵌套if来代替.

      if标签还可以用其它操作符,如 ==, !=, <, >, <=, >=, in, not in, is, is not 它们是这么用的:
== 等于:

!= 不等于、 < 小于、 > 大于、 <= 小于等于、 >= 大于等于,这几个操作符的用法例子同==
in 包含在内
      此操作符号支持许多Python容器类对象,用于判断容器中是否存在某一变量.下面的例子
都是in的可用形式(字符串,list,set…):

not in 不包含在内.
in的对立操作.

is 对象匹配.
判断两个变量/对象是否是同一个变量/对象:

is no非对象匹配.
判断两个变量/对象是否不是同一个变量/对象.is的对立操作:

Filters
你在if表达式后面也可以使用filter,例如:

Complex expressions
      上面这些操作符能组成更复杂的表达式,于此,了解运算符优先级规则在求值表达式时如何分组是很重要的.
下面的运算符的优先级从最低到最高:

  • or
  • and
  • not
  • in
  • ==, !=, <, >, <=, >=

(优先级规则遵循Python).例如,如下的 if 标签表达式:
{% if a == b or c == d and e %}
等同于Python中的:
if((a == b) or ((c == d) and e)
      如果你想使用不同的优先级顺序, 为了大家都明白你的优先级顺序,你该使用其嵌套的 if 标签.比较运算符不能像Python那样写一串儿,你不能这么写:
{% if a > b > c %} (WRONG)
应该这样写:
{% if a > b and b > c %}

ifequal 和 ifnotequal

{% ifequal a b %}..{% endifequal %} 等价于 {% if a == b %}...{% endif %}.
{% ifnotequal a b %}..{% endifnotequal %} 等价于{% if a != b %}...{% endif %}.
这两个标签未来会废弃,用 == 和 != 就好了.

ifchanged (翻译完也没懂它的作用,请自己找例子理解)

功能: 在for循环中某些检查值是否发生改变
{% ifchanged %} 用在循环里面,两种用途.

  1. 检查当前渲染内容和之前的状态是否相同,如果不同则重新展示.此例中显示了一些日期,只有月份变化才会显示月份:
  2. 给一些变量,检查它们是否有变化.下面的实例,每当日期变化就显示,小时变化也会显示:

ifchanged标签也可以使用 {% else %} 表示某个变量未发生变化:

include

功能: 在当前内容页中加载一个模板,模板名称可以是一个而变量或者一个字符串.
这个例子包含了一个叫做 "foo/bar.html"的模板:
{% include "foo/bar.html" %}
模板的名字都是一个template文件夹下子文件(也就是一个相对路径),通常以./或…/开头. .
此例以一个变量 template_name作为模板的名字:
{% include template_name %}
变量的形式还可以是一个对象,对象有个render()方法接收内容. 这样允许你在上下文中引用已编译的模板(暂时不明白).

一个被包含的模板,由包含它的模板进行内容的渲染,同时变量可以跨模板使用.这个例子输出 “Hello, John!”:

  • Context: person 设置为 “John” greeting 设置为 “Hello”.

  • Template:
    {% include "name_snippet.html" %}

  • name_snippet.html :
    {{ greeting }}, {{ person|default:"friend" }}
    通过with关键字,可以把显示地传递参数:

           上面提到过变量可以跨模板使用,子模板可以引用父模板中的变量,如果你指定了only 选项,那么只有被only跟随的那些变量可以跨模板使用,其它的不行.:
    {% include "name_snippet.html" with greeting="Hi" only %}

load

功能: 加载一些模板tag或filter [也可能是变量].
例如: 如下的模板将会加载所有来自(somelibrary文件和包package内otherlibrary文件)中的标签和过滤器:
{% load somelibrary package.otherlibrary %}
你可以选择性地从某文件中加载指定名称的标签或过滤器. 此例中 bar和 foo(标签或过滤器)从somelibrary文件中被引入:
{% load foo bar from somelibrary %}
更多关于自定义标签和过滤器的内容请见Custom tag and filter libraries.

lorem

功能: 随机生成拉丁文的"乱数假文".在模板内随机生成测试数据测试页面.
使用方法:

{% lorem %} 标签可以提供3个参数,你可以指定前n(1-3)个参数. 这3个参数是:

now

功能:使用格式化的字符串显示当前日期或时间.这个格式化的字符串可以使用date过滤器中指定的参数 .
例如:
It is {% now "jS F Y H:i" %}
如果你想参数不被转义,你可以使用反斜线.下面的例子原本会输出 It is the 26th 2018 12:30 十月,转义之后输出It is the 26th of 十月 :


你可以使用as+别名来存储当前结果的字符串形式 {% now "Y" as current_year %} .如果你想在blocktrans模板标签中使用now标签,这会很有用 blocktrans :

regroup

功能:按照某一属性对一个列表进行重新分组.
这个复杂的标签最好用一个例子来说明。cities 是一个城市的列表,包含了很多字典对象,
每个字典对象由name,population,country这三个key和对应的value组成:

如果你想显示一个以国家分级的列表,如下面的样式:

下面的代码将会帮你实现这种结果:

看看这个例子,regroup标签接收三个参数,一个列表,对列表中哪个属性进行分组,分组之后的对象.
这里我们对cities列表中的country进行重新分组,结果对象名为result_list.

regroup标签返回的新列表是一种 group objects的实例. Group objects 实现了 namedtuple()函数 并提供两个属性:

  • grouper – 被分组的属性(e.g., 字符串 “India” or “Japan”).
  • list – 当前分组中的所有项 .

因为regroup标签产生的是 namedtuple() 对象, 前面的例子还可以这么写:

注意,regroup不会对列表进行排序. 我们的例子之所以能成功,需要列表事先按照country这个属性
排列好,否则同一个分组会输出多次,例如你给的列表变成了这样顺序:

输出结果会变成这样:

    最好的解决方法是按照输出结果知错就改.另一种方法是使用过滤器dictsort(如果你的列表是字典构成的):

{% regroup cities|dictsort:"country" by country as country_list %}

Grouping on other properties
    对于regroup标签来说,它的分组属性可以是任何的 valid template lookup, 包括方法,属性,字典的键
和列表的项. 例如,如果country字段是一个模型类的外键并且country字段所表示的类还有一个
descrption属性,可以这么用:

{% regroup cities by country.description as country_list %}

如果country是一个模型类的字段,该字段含有choices选项,它会有一个 get_FOO_display() 方法可用, 允许你在此方法返回的字符串属性上进行分组:

{% regroup cities by get_country_display as country_list %}

{{ country.grouper }} 会显示choices中的属性而不是键,如下 .

resetcycle

功能:重置cycle标签,下次循环从第一个参数开始.不对{% resetcycle %} 标签提供参数将会重置最近的 {% cycle %} 值.
使用方法:

输出的HTML如下:

注意:第一块结束时,class=“odd” 第二块开始也是class=“odd”. 如果不提供resetcycle,第二块开始会是 class=“even”.
你也可以给reset标签重命名:

在这个例子中,每五行有一个major行,只有当category变化的时候,major行重置.
spaceless
功能:移除 html标签和标签之间的空白(tab,空行).
使用方法:

结果返回的HTML是这样的:

只有标签之间的空白被移除了,标签内的文本是不会移除的. 在此例中 Hello两边的空白不会被移除:

templatetag

功能:输出用于组成模板标签的语法字符之一.
由于模板系统里面没有"转义"的概念,django为你提供了{% templatetag %} 标签.
如下参数决定输出什么字符:

url

功能:返回某个视图(可能含有参数)的绝对路径(不包含域名).路径内的特殊字符会使用 iri_to_uri()编码.
在你的模板中使用 URL硬编码并不违反DRY 原则:
{% url 'some-url-name' v1 v2 %}
第一个参数是 URL pattern name.它可以用引号包裹也可以是一个上下文中的变量,后面是URL参数,使用
空格分开.上面的传参例子也可以通过下面的例子显示地指定:
{% url 'some-url-name' arg1=v1 arg2=v2 %}
这两种方式不要混用,所有参数都应该有值.
    例如,你有个视图函数app_views.client,它的URL接收一个client ID (client()是app_views.py中的一个函数). URL配置如下:
path('client/<int:id>/', app_views.client, name='app-views-client')
如果app的url被包含到了工程里面:
path('clients/', include('project_name.app_name.urls'))
在一个模板里,你可以这样访问一个视图:
{% url 'app-views-client' client.id %}
其请求的url将会是 /clients/client/123/.
如果你的url反向解析无法找到视图函数,你会得到一个 NoReverseMatch错误, 页面上将会显示错误.

如果你想看看请求的url是什么而不请求视图内容,你可以这么写:

可以用as+别名 存储你请求的url,哪怕视图函数不存在也不会报错.例子中链接到一个可选的视图:

如果你想检索一个命名空间里的url,这么做:
{% url 'myapp:view-name' %}
这会采用普通的 namespaced URL resolution 策略, including using any hints provided by the context as to the current application(不太明白).

verbatim

功能:不让模板引擎渲染此标签中的内容.
经常用它来处理js和Django模板引擎冲突的问题,例如:

你可以设计一个自定义的闭合标签:

widthratio

功能:为了创建条形图或其它,这个标签计算你给的变量和最大值之间的百分比(也可以做乘除法).
例如:

如果 this_value =175, max_value =200, and max_width =100, 上面的结果会是88 (因为 175/200 = .875; .875 * 100 = 87.5 向上取整为88).

在一些情况下,你可以把这个结果存在变量里. 例如你在 blocktrans 中想这么用:

with

功能:给复杂的变量一个别名.例子:

别名只在块内有效,你可以为多个变量指定别名:
{% with alpha=1 beta=2 %} ... {% endwith %}

tag 部分 - 完


2.内置过滤器 一览

addslashes

功能:在引号前面加反斜线,用来对CSV中的字符串进行转义.例如:

如果 value 是 “I’m using Django”, 输出是 “I’m using Django”.

capfirst

功能:将字符串的第一个字符大写,第一个字符不是字母的话,没有效果.
例如:
{{ value|capfirst }}
如果 value 是 “django”, 输出是 “Django”.

center

功能:让一个值占指定的宽度,值居中,两边添加空白.
{{ value|center:"15" }}
如果 value 是 “Django”, 输出是" Django ".

cut

功能:移除所有字符串中所有指定字符.
{{ value|cut:" " }}
如果 value 是 “String with spaces”, 输出是 “Stringwithspaces”.

date

功能:根据给定的格式来格式化一个日期.和PHP里面的date()功能相似,但又有不同.

格式 描述 输出
Day - -
d 月中的天数,两位数字组成,用0补足 ‘01’ ~ ‘31’
j 月中的天数,不用0补足 ‘1’ ~ ‘31’
D 星期几,3个字母组成的文本 ‘Fri’
l 星期几,英文单词 ‘Friday’
S 月中的天数,英文表示法,2个字符组成的文本 ‘st’, ‘nd’, ‘rd’ 或者’th’
w 星期几,数字表示法,没有前导0 ‘Friday’
l 星期几,英文单词 ‘0’ (周日) to ‘6’ (周六)
z 年中第几天 0 ~ 365
Week - -
W ISO-8601标准,每周在年中是第几个星期(以周一开始) 1~53
Month - -
m 月份,两位数字组成,有前导0 ‘01’ ~ ‘12’
n 月份,没有前导0 ‘1’ ~ ‘12’
M 月份,3个字母组成的文本 ‘Jan’
b 月份,3个小字母组成的文本 ‘jan’
E 月份,特定地区的表示,通常用长日期表示 在波兰,一月用 listopada 而不用Listopad 表示
F 月份,英文单词 ‘January’
N 美联社风格中的月份缩写,专用拓展 ‘Jan.’, ‘Feb.’, ‘March’, ‘May’
n 一个月中有多少天 28~31
Year - -
y 年份,2个数字组成. ‘99’
Y 年份,4个数字组成. ‘1999’
L 是否是闰年. True / False
o - ‘1999’
Time - -
g 小时,12小时制,没有前导0 ‘1’ ~ ‘12’
G 小时,24小时制,没有前导0 ‘0’ to ‘23’
h 小时,12小时制 ‘01’ to ‘12’
H 小时,24小时制 ‘00’ to ‘23’
i 分钟 ‘00’ to ‘59’
s 秒, 2个数字组成,有前导0 ‘00’ to ‘59’
u 毫秒 000000 ~999999
a ‘a.m.’ 或 ‘p.m.’ (和php有轻微的不同,因为它包含的日期匹配美联社风格.) ‘a.m.’
A ‘AM’ 或 ‘PM’ ‘AM’
f 时间,12制的小时+分钟,如果分钟是0,不显示. 专有拓展 ‘1’, ‘1:30’
P 时间,12制的小时+分钟+上午/下午,如果分钟是0,不显示.适当的时候还会显示midnight/noon 专有拓展. ‘1 a.m.’, ‘1:30 p.m.’, ‘midnight’, ‘noon’, ‘12:30 p.m.’
Timezone - -
e 时区名称.可以是任何格式,也可能返回空字符串,看datetime是什么类型. ‘’, ‘GMT’, ‘-500’, ‘US/Eastern’
I 夏令时时间是否有效. ‘1’ 或 ‘0’
O 与格林尼治时间的差异(以小时为准). ‘+0200’
T 本机的时区 ‘EST’, ‘MDT’
Z 时区的秒时差. UTC西部时区偏移量 总是负的,对于那些东方UTC总是正的. -43200 ~ 43200
Date/Time - -
c ISO 8601 格式. (注意: 不像其它格式,如果一个值是纯日期时间值 “Z”, “O” or “r”, “c” 格式不会添加时区偏移 (see datetime.tzinfo) 2008-01-02T10:30:00.000123+02:00 或者 2008-01-02T10:30:00.000123
r RFC 5322 格式的日期 ‘Thu, 21 Dec 2000 16:01:07 +0200’
U Unix时间(秒数) (January 1 1970 00:00:00 UTC). 1541687484.4693835

如果value是datetime对象(例如,结果 datetime.datetime.now()),则输出将是字符串 ‘Wed 09 Jan 2008’

传递的格式字符串可以是那些预定义的格式字符串DATE_FORMAT, DATETIME_FORMAT,SHORT_DATE_FORMAT, SHORT_DATETIME_FORMAT中的一个,或使用在上面表中所示的格式来自定义格式。请注意,预定义格式可能因当前区域设置而异。

假设那USE_L10N是True和LANGUAGE_CODE是"es",那么:

输出将是字符串"09/01/2008"(Django里面"SHORT_DATE_FORMAT" 针对es语言环境的格式化字符串为 “d/m/Y”)中文环境输出2018年9月1日

如果date过滤器没有参数,默认使用DATE_FORMAT格式输出输出。假如设置与前一个示例相同:

输出结果是9 de Enero de 2008(“DATE_FORMAT” 针对es语言环境的格式化字符串为 ‘j \d\e F \d\e Y’),中文环境输出2008年9月1日 13:19

您可以将date过滤器与time过滤器结合使用以呈现datetime值的完整表示。例如:

default

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

如果value是None,输出将是nothing。

default_if_none

功能:如果(且仅当)值为None,则使用给定的默认值。否则,使用该值。
请注意,如果给出空字符串,则不会使用默认值。如果想处理空字符串,请使用default过滤器。

如果value是None,输出将是nothing。

dictsort

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

如果value是:

输出将是:

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

如果books是:

输出将是:

dictsort 也可以对列表内的列表(或任何其他实现了__getitem__()的对象 ),排序的键是列表所处的位置索引。例如:

如果value是:

输出将是:

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

dictsortreversed

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

divisibleby

功能:如果值可以被参数整除则返回True。

如果value是21,输出将是True。

escape

功能:转义部分HTML字符串。具体来说,它替换这些字符串:

对变量使用escape过滤器,结果会自动转义,此过程只发生一次。因此,即使在自动转义环境中也可以安全地使用此功能。如果要应用多个转义传递,请使用force_escape过滤器。
例如,您可以在autoescape关闭时使用escape:

escapejs

转义用于JavaScript字符串的字符。这并没有让HTML或JavaScript模板文字使用的字符串变得安全,但使用模板来生成JavaScript / JSON的时候会检查你的语法错误。

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

filesizeformat

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

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

first

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

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

floatformat

功能:控制浮点数的输出形式。
如果在没有参数的情况下使用(等价于floatformat:"-1"),则将浮点数舍入到一个小数位,前提是小数部分非0 。

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

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

如果传递给的floatformat参数为负数,结果和传递一个正数一样,唯一不同的是,如果小数部分都是0,则不会输出:

force_escape

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

例如,如果要捕获过滤器linebreaks创建的HTML

标签:

get_digit

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

如果value是123456789,输出将是8。

iriencode

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

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

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

join

功能: 使用字符串连接列表,像Python里面的 str.join(list)

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

json_script

Django 2.1中的新增
功能:安全地将一个Python对象输出为JSON,用<script>标签包裹,随时可以在JavaScript中使用。
参数: HTML中<script>标签的id .

如果value是字典{‘hello’: ‘world’},输出将是:

生成的数据可以在JavaScript中访问,如下所示:

通过转义字符“<”,“>”和“&”来减轻XSS攻击。例如,如果value是{'hello': 'world</script>&amp;'},则输出为:

这与严格的内容安全策略兼容,该策略禁止页内脚本执行。它还保持被动数据和可执行代码之间的清晰分离。

last

功能:返回列表中的最后一项。
例如:如果value是列表[‘a’, ‘b’, ‘c’, ‘d’],则输出将是字符串 d

length

功能:返回值的长度。这适用于字符串和列表。
例如: 如果value是[‘a’, ‘b’, ‘c’, ‘d’]或"abcd",输出是 4。
过滤器对未定义的变量返回0。

length_is

功能:如果变量的长度和参数相等返回True,不相等返回False。
例如: 如果value是[‘a’, ‘b’, ‘c’, ‘d’]或"abcd",输出将是 True。

linebreaks

功能:用适当的HTML替换纯文本中的换行符; 单个换行符变成HTML换行符(<br>),后面跟空行的换行符变成段落符号(<p>)。
例如,如果value是Joel\nis a slug,输出将是<p>Joel<br>is a slug</p>

linebreaksbr

功能:将一段纯文本中的所有换行转换为HTML换行符(<br>)。
例如,如果value是Joel\nis a slug,输出将是Joel<br>is a slug

linenumbers

功能:显示带行号的文本。
例如:

如果value是:

输出将是:

ljust

功能: 数值在给定的宽度中居左。
参数:宽度大小
例如,如果value是Django,输出将是。"Django  "

lower

功能:将字符串全部转换为小写。
例如,如果value是Totally LOVING this Album!,输出将是 totally loving this album!

make_list

功能:将变量打散到列表中。对于字符串,它是一个字符列表。对于整数,在创建列表之前将参数强制转换为字符串。
例如,如果value是字符串"Joel",则输出将是列表[‘J’, ‘o’, ‘e’, ‘l’] 。如果value是123,输出将是列表[‘1’, ‘2’, ‘3’]。

phone2numeric

功能:将电话号码(可能包含字母)转换为其等效数字。
输入不必是有效的电话号码。这将转换任何字符串。
例如,如果value是800-COLLECT,输出将是800-2655328

pluralize

功能:如果值不是1,则返回一个复数形式,通常在后面添加’s’表示。
例如:

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

另外如果需要的不是’s’后缀的话, 可以提供一个备选的参数给过滤器:

如果你想为单数提供y后缀,多数提供ies后缀,用逗号隔开。例如:

pprint

功能:用于调试的过滤器,本质是包装了python的pprint.pprint()函数。

random

功能:返回给定列表中的随机项。
例如,如果value是列表[‘a’, ‘b’, ‘c’, ‘d’],则输出可以是"b":

rjust

功能: 数值在给定的宽度中居右。
参数:宽度大小
例如,如果value是Django,输出将是。" Django"

safe
将字符串标记为不需要在输出前进行HTML转义,当自动转义关闭(在autoescape off范围内),此过滤器无效。
注意
如果你在一个变量上使用了多个过滤器,那么safe之后的过滤器可能使得变量再次不安全,例如:

safeseq

功能: 将safe过滤器应用于序列的每个元素。 与对序列进行其他过滤操作(例如join)一起使用时非常有用。

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

slice

功能: 返回列表的一部分。也就是切片,与Python的列表切片相同的语法。
例如,如果some_list是[‘a’, ‘b’, ‘c’] ,下面的输出为[‘a’, ‘b’]。

slugify

功能: 转换为ASCII。空格转换为连字符。删除不是字母或数字的字符,下划线或连字符的字符。转换为小写,还会去除前导和尾随空格。
例如,如果value是Joel is a slug,输出为joel-is-a-slug

stringformat

功能: 根据参数,格式化变量。此说明符使用python3 中printf样式的字符串格式语法,但删除前导“%”。
例如,如果value为10,输出将为1.000000E+01:

striptags

功能: 尽可能的去除 [X] HTML中的标签。
例如,如果value是<b>Joel</b> <button>is</button> a <span>slug</span>,输出将是Joel is a slug

注意
striptags不保证其输出是HTML安全的,特别是对于无效的HTML输入。所以永远不要将 safe过滤器应用于striptags输出。如果您正在寻找更强大的东西,您可以使用Python库bleach,特别是它的 clean方法。

time

功能: 根据给定的格式,格式化时间。给定格式可以是预定义的TIME_FORMAT,也可以是与date过滤器相同的自定义格式。请注意,预定义格式取决于区域设置。
例如,如果value等于datetime.datetime.now(),则输出字符串01:23

另一个例子,假设USE_L10N是True并且LANGUAGE_CODE是de,那么:

输出将是字符串01:23(Django中TIME_FORMAT为de语言环境的格式设置为"H:i")。

time过滤器只接受格式字符串中与时间相关的参数,而不是日期。如果需要格式化date值,请改用date过滤器。如果要格式化datetime值,请同时使用date和time过滤器。
如果没有为time过滤器指定参数,那么
{{ value|time }}等价于{{ value|time:"TIME_FORMAT" }}

timesince

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

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

Comparing offset-naive and offset-aware datetimes will return an empty string. 这句不懂。
最小单位是分钟,comment_date要比blog_date靠后,否则返回0 minute

timeuntil

功能: 类似于timesince,它测量从现在开始直到给定日期或日期时间的时间。例如,如果今天是2006年6月1日,而conference_date是2006年6月29日,则{{ conference_date | timeuntil }}将返回“4 weeks”。
Comparing offset-naive and offset-aware datetimes will return an empty string. 这句不懂。
最小单位是分钟,conference_date要比当前时间靠后,否则返回0 minute

title

功能: 将所有单词的首字母大写,其它字母小写。
例如,如果value为“my FIRST post”,输出将为“My First Post”。
{{ value|title }}
译者注:这里面如果value为There's nothing,输出为There's Nothing
这里面的单引号不会造成错位,可以放心使用。python里面就不可以了,详情请看python中的str.title()。

truncatechars

功能:如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。截断的字符串将以“…”结尾。
用法:{{ value|truncatechars:9 }}
例如:如果value是Joel is a slug,输出为Joel i...

truncatechars_html

功能: 类似于truncatechars,但是会保留HTML标签。
也就是从HTML标签之后开始进行截断,截断到指定字符后,闭合标签。

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

truncatewords

功能: 在一定数量的字数后截断字符串。与truncatechars不同的是,这个以字的个数计数,而不是字符计数。
例如:如果value 是Joel is a slug, 输出为Joel is ...

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

truncatewords_html

功能: 类似于truncatewords,但是保留HTML标记。
用法: {{ value|truncatewords_html:2 }}
HTML内容中的换行符将保留。

unordered_list

功能: 接收一个嵌套的列表,返回一个HTML的无序列表,但不包含开始和结束的<ul>标签。

例如,如果var 包含[‘States’, [‘Kansas’, [‘Lawrence’, ‘Topeka’], ‘Illinois’]], 那么{{ var|unordered_list }}将返回:

upper

功能: 将字符串转换为全部大写的形式:
用法: {{ value|upper }}

urlencode

功能: 转义要在URL中使用的值。
用法: {{ value|urlencode }}

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

可以在urlendoce后面添加不想转义的字符,例如不转义: / &这三个符号可以这么写。
{{ urlize_str|urlencode:":/&" }}
结果是:https://www.example.org/foo%3Fa%3Db&c%3Dd%22

如果不提供参数的话,默认/这个符号是不被转义的,如果想转义左右字符,请使用使用空格,例如{{ value|urlencode:"" }}

urlize

功能: 将文字中的网址和电子邮件地址转换为可点击的链接。
用法:{{ value|urlize }}
该模板标签适用于前缀为http://https://或者www链接。例如:https://goo.gl/aia1t可以,但是goo.gl/aia1t不可以。
以顶级域名(com,.edu,.gov,.int,.mil,.net,和 .org)结尾的链接也可以,例如 djangoproject.com

由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 tofoo@example.com`。

urlize过滤器有一个可选的参数autoescape。如果 autoescape是True,链接文本和URL将使用Django的内置escape过滤器进行转义。autoescapei的默认值是True。
注意
如果urlize应用于已包含HTML标记的文本,则事情将无法按预期工作。你最好只将此过滤器应用于纯文本。

urlizetrunc

功能: 同urlize过滤器一样,只不过会截断一部分链接内容。
参数:链接文本的字符数应按照此参数截断,包括在需要截断时添加的省略号。
用法:{{ value|urlizetrunc:15 }}
如果value是Check out www.djangoproject.com,输出将Check out www.djangopr…’

wordcount

功能: 返回单词的个数。
用法: {{ value|wordcount }}
如果value是Joel is a slug,输出4。

wordwrap

功能: 以指定的行长度,换行单词。
用法: {{ value|wordwrap:5 }}
如果value是Joel is a slug,输出为:

yesno

功能: 根据值的True,False,None返回对应的字符串(字符串一般由用户提供)
例如: {{ value|yesno:"yeah,no,maybe" }}

参数 输出
True yes
True “yeah,no,maybe” yeah
False “yeah,no,maybe” no
None “yeah,no,maybe” maybe
None “yeah,no” no (如果None对应的字符串没提供,那么使用no对应的字符串)

3.国际化标签和过滤器

Django提供模板标签和过滤器来控制模板中国际化的每个方面 。它们允许对翻译,格式和时区转换进行精细控制。

i18n

功能: 此库允许在模板中指定可翻译文本。要启用它,请设置USE_I18N=True,然后加载它{% load i18n %}
请参阅国际化:在模板代码中。

i18n

功能: 该库提供对模板中值做本地化的处理。要启用它,请设置USE_L10N=True,然后加载它{% load l10n %}
请参阅控制模板中的本地化。

tz

功能: 此库提供对模板中时区转换的控制。要启用它,请设置USE_TZ=True,然后加载它{% load tz%}
请参阅模板中的时区输出。


4.其他标签和过滤器库

Django附带了几个其他模板标签库,您必须在settings.py文件的INSTALLED_APPS设置中明确启用它们,并在模板中启用标记。{% load %}

static

Django 使用staitc标签链接到STATIC_ROOT中指定的静态文件。如果安装了django.contrib.staticfiles这个应用,则标签将使用url()方法查找存储在STATICFILES_STORAGE中的静态文件。例如:

它还能够使用标准上下文中存在的变量,例如将 user_stylesheet变量传递给模板:

如果您想要获取静态文件的URL并在之后某个地方使用,可以这么做:

注意
有关在Jinja2中使用static标签的信息,请参阅Jinja2。

get_static_prefix

您应该优先使用static标签,但如果需要更多地控制STATIC_URL在模板的确切位置和方式,则可以使用get_static_prefix

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

get_media_prefix

get_static_prefix类似,get_media_prefix使用媒体文件前缀MEDIA_URL填充模板变量,例如:

如果我们想在JavaScript上下文中使用它,通过将值存储在数据属性中并且确保它被适当地转义。

Django 2.1.3 文档-模板-内置标签和过滤器(tagfilter)相关推荐

  1. pytest文档80 - 内置 fixtures 之 cache 写入中文显示\u4e2d\u6587问题(用打补丁方式解决)

    前言 pytest 内置 fixtures 之 cache 写入中文的时候会在文件中写入\u4e2d\u6587 这种unicode编码格式. 如果想在文件中显示正常的中文,需重新Cache类的set ...

  2. html 列表循环_python web开发:内置标签与过滤器/循环/条件判断

    专注于python领域优质技术,欢迎关注 这一篇教程,我们继续了解Django中模板的使用. 主要内容如下: 内置标签和过滤器: 模板中使用循环: 模板中添加条件判断. 一.内置标签和过滤器 Djan ...

  3. Django 1.8.2 文档

    django 百科全书 入门¶刚开始学习Django或者编程?让我们从这里开始吧! 从零开始: 概述 | 安装 教程: 第1部分:模型(100%) | 第2部分:管理站点(100%) | 第3部分:视 ...

  4. django 内置标签与过滤器

    #内置标签与过滤器 本文档介绍了Django的内置模板标签和过滤器. 我们推荐尽可能使用 自动文档,同时也可以自行编辑任何已安装的自定义标签或过滤器的文档. ##内置标记引用 ###autoescap ...

  5. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  6. 十三种技术文档模板_竞品分析|关于产品规划的思考:石墨文档 VS 腾讯文档 VS金山文档...

    作者以在线协作文档行业领先的石墨文档.腾讯文档和金山文档为例进行了了竞品分析,通过对几款产品全方位的分析,总结了自己关于石墨文档产品规划的思考. 一.竞品概述 1. 竞品目的 2. 竞品目的 通过对石 ...

  7. 如何撰写产品需求文档_需求文档模板(产品功能类需求篇)

    前言 需求文档在产品整个开发过程中至关重要,设计根据需求考虑交互功能.需求沟通评审和开发.测试验收标准.文档知识沉淀问题记录等过程都依赖规范完整的需求文档,除功能内容全面外,整洁.易读也是需求文档的重 ...

  8. 架构实战:架构设计文档模板

    在前面的专栏里,有同学留言说想看看具体的架构设计文档.由于信息安全的原因,再加上稍微复杂的系统,设计文档都是几十页,因此专栏无法直接给出详细的文档案例.但我认为提供一个架构设计文档模板还是很有必要的, ...

  9. 一份很不错的敏捷产品接口文档模板

    在采用敏捷研发的过程中,前后端开发人员如何来描述与记录接口信息?如何精简的描述接口的用处?接口的请求方式?接口的入参是什么?返回模型是什么等等. 结合我们项目团队多年的实际情况以及授课老师的推荐,我觉 ...

最新文章

  1. python学习方向-Python学习者的发展方向
  2. WebService大讲堂之Axis2(3):使用services.xml文件发布WebService
  3. 深度学习RCNN, Fast-RCNN, Faster-RCNN的一些事
  4. angular学习笔记(十九)-自定义指令修改dom
  5. combobox的值从主页面传递到子页面
  6. Python使用chardet包自动检测编码
  7. 为防 Android 碎片化?Google 强迫开发者使用自有开发工具!
  8. Volley源码解析(二)
  9. 【题解】Luogu P3871 [TJOI2010]中位数
  10. javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V,maven项目报错!!无法访问webapp下的文件,完美解决方案
  11. VB - 通过vs2010编写vb程序操作word与excel
  12. Module not found: Error: Can‘t resolve ‘vue-router‘ in
  13. python批量打印word_Python操作Word批量生成文章的方法
  14. 关于数学公式的软件和markdown
  15. 那些年,我们信了课本里的那些鬼话
  16. R语言计算并合并各物种的OTU数量
  17. 体检报告录入有误,到底是谁的错?
  18. Markdown设置字体大小、颜色、类型、加粗
  19. Android Studio 关于TextToSpeech Speak失败
  20. 汇编inc为什么不影响cf,为什么INC和DEC指令不影响进位标志(CF)?

热门文章

  1. 离散数学基础--逻辑与证明
  2. 【JVM】四、JVM优化-GC调优
  3. java智慧农贸商户设备检测系统ssm-springboot
  4. Python后端转JAVA最快多久_【动力节点】老杜支招:Java小白学习入门攻略,涵盖学习路线...
  5. 自学STC32G12K128单片机总结——1.点灯
  6. js中数组去重的方法
  7. 配置文件加密(Jasypt的简单使用)
  8. 常用电子元器件简介(转)
  9. 网络间谍成今年全球企业最大威胁
  10. Python微信好友信息意义及取值分析(基于itchat)