Django 2.1.3 文档-模板-内置标签和过滤器(tag&filter)

33 篇文章 2 订阅
13 篇文章 1 订阅


- - 译自官方文档 --
内置标签和过滤器(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是这样的:
Foo
只有标签之间的空白被移除了,标签内的文本是不会移除的. 在此例中 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--
WISO-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--
cISO 8601 格式. (注意: 不像其它格式,如果一个值是纯日期时间值 “Z”, “O” or “r”, “c” 格式不会添加时区偏移 (see datetime.tzinfo)2008-01-02T10:30:00.000123+02:00 或者 2008-01-02T10:30:00.000123
rRFC 5322 格式的日期‘Thu, 21 Dec 2000 16:01:07 +0200’
UUnix时间(秒数) (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" }}

参数输出
Trueyes
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上下文中使用它,通过将值存储在数据属性中并且确保它被适当地转义。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值