内置模板标签

autoescape

控制当前的自动转义行为。此标记采用on或 off作为参数,并确定自动转义是否在块内生效。该块以endautoescape结束标记关闭。

{% autoescape on %}
    {{ body }}
{% endautoescape %}

block

定义可由子模板覆盖的块

comment

忽略之间的所有内容。可以在第一个标签中插入可选的注释。例如,在注释掉用于记录代码被禁用的原因的代码时,这非常有用。

<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
    <p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}

csrf_token

此标记用于CSRF保护

cycle

每次遇到此标记时都会生成其中一个参数。第一个参数是在第一次遇到时产生的,第二个参数是在第二次遇到时产生的,依此类推。一旦所有参数都耗尽,标记将循环到第一个参数并再次生成它。(可以使用变量)

{% for o in some_list %}
    <tr class="{% cycle 'row1' 'row2' %}">
        ...
    </tr>
{% endfor %}

{% cycle 'row1' 'row2' as rowcolors %}
作为变量使用

debug

输出一整套调试信息,包括当前上下文和导入的模块。

extends

表示此模板扩展父模板的信号,可以继承变量和值,能够使用相对路径

filter

通过一个或多个过滤器过滤块的内容。可以使用管道指定多个过滤器,过滤器可以具有参数,就像在变量语法中一样。

请注意,该块包含和 标记之间的所有文本。filterendfilter

{% filter force_escape|lower %}
    This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}

firstof

输出第一个不是的参数变量False。如果所有传递的变量都没有输出False。

{% firstof var1 var2 var3 %}

此标记自动转义变量值。您可以使用以下命令禁用自动转义

{% autoescape off %}
    {% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
{% endautoescape %}

或者,如果只应转义某些变量,您可以使用:

{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}

您可以使用语法将输出存储在变量中。{% firstof var1 var2 var3 as value %}

for

循环遍历数组中的每个项目,使项目在上下文变量中可用

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

您可以使用反向循环遍历列表 。{% for obj in list reversed %}

如果您的上下文包含字典data,则以下内容将显示字典的键和值

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}
变量 描述
forloop.counter 循环的当前迭代(1索引)
forloop.counter0 循环的当前迭代(0索引)
forloop.revcounter 循环结束时的迭代次数(1索引)
forloop.revcounter0 循环结束时的迭代次数(0索引)
forloop.first 如果这是第一次通过循环,则为真
forloop.last 如果这是最后一次循环,则为真
forloop.parentloop 对于嵌套循环,这是围绕当前循环的循环

for...... empty

该for标签可以使用一个可选条款,其文本显示,如果给定的数组为空或无法找到:{% empty %}

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% empty %}
    <li>Sorry, no athletes in this list.</li>(为空显示此条)
{% endfor %}
</ul>

if

所述标签计算一个变量,并且如果该变量是“真”(即存在,不为空,并且不是假布尔值)的数据块的内容被输出

{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
    Athletes should be out of the locker room soon!
{% else %}
    No athletes.
{% endif %}

布尔运算符 and or not

and 优先级高于or

{% if athlete_list and coach_list %}
    Both athletes and coaches are available.
{% endif %}

{% if not athlete_list %}
    There are no athletes.
{% endif %}

{% if athlete_list or coach_list %}
    There are some athletes or some coaches.
{% endif %}

{% if not athlete_list or coach_list %}
    There are no athletes or there are some coaches.
{% endif %}

{% if athlete_list and not coach_list %}
    There are some athletes and absolutely no coaches.
{% endif %}

其他布尔运算符

符号 意义
== 判断等于
!= 不等于
< 小于
> 大于
>=,<= 大于等于,小于等于
in,not int 包含在内以及否定(字符串包含和列表包含)
is,is not 对象身份。测试两个值是否是同一个对象
过滤器
{% if messages|length >= 100 %}
   You have lots of messages today!
{% endif %}

ifequal和ifnotequal

{% ifequal a b %} ... {% endifequal %}是一种过时的写作方式 。同样,被取代。在和标签将在未来的版本中将会弃用。{% if a == b %} ... {% endif %}{% ifnotequal a b %} ... {% endifnotequal %}{% if a != b %} ... {% endif %}ifequalifnotequal

ifchanged

检查一个值是否从循环的最后一次迭代中发生了变化。

include

加载模板并使用当前上下文呈现它。这是一种在模板中“包含”其他模板的方法。(可用变量)
您可以使用关键字参数将其他上下文传递给模板

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}

如果只想使用提供的变量(甚至根本没有变量)渲染上下文,请使用该only选项。包含的模板没有其他变量可用:

{% include "name_snippet.html" with greeting="Hi" only %}
不推荐使用

load

加载自定义模板标记集。
例如,以下模板将加载在包中注册somelibrary和otherlibrary位于包中的 所有标记和过滤器package

{% load somelibrary package.otherlibrary %}

您还可以使用from参数从库中选择性地加载单个过滤器或标记。在此示例中,模板标记/过滤器已命名foo 并将bar从somelibrary以下位置加载

{% load foo bar from somelibrary %}

lorem

显示随机的“lorem ipsum”拉丁文。这对于在模板中提供样本数据非常有用。

{% lorem [count] [method] [random] %}
参数 描述
count 包含要生成的段落或单词数的数字(或变量)(默认值为1)。
method 无论是w对词,p对HTML段落或b 为纯文本段落块(默认为b)。
random 这个词random,如果给出,在生成文本时不使用共同段落(“Lorem ipsum dolor sit amet ...”)。

now

使用根据给定字符串的格式显示当前日期和/或时间。此类字符串可以包含格式说明符字符,

It is {% now "jS F Y H:i" %}

传递的格式也可以是预定义者之一 DATE_FORMATDATETIME_FORMATSHORT_DATE_FORMATSHORT_DATETIME_FORMAT。预定义格式可能会根据当前区域设置和启用的格式化本地化而有所不同,

regroup

通过公共属性重新组合相似对象的列表

cities = [
    {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
    {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
    {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
    {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
    {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]

您可以使用标记按国家/地区对城市列表进行分组。

{% regroup cities by country as country_list %}

<ul>
{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for city in country.list %}
          <li>{{ city.name }}: {{ city.population }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>
  • 印度
    • 孟买:19,000,000
    • 加尔各答:15,000,000
  • 美国
    • 纽约:20,000,000
    • 芝加哥:7,000,000
  • 日本
    • 东京:33,000,000

resetcycle

重置上一个循环,以便在下次遇到时从第一个项目重新开始。

spaceless

删除HTML标记之间的空格。这包括制表符和换行符。
只删除标签之间的空格- 而不是标签和文本之间的空格。

templatetag

输出用于组成模板标记的语法字符之一
由于模板系统没有“转义”的概念,因此要显示模板标签中使用的其中一个位,必须使用该标签。{% templatetag %}

参数 输出
openblock {%
closeblock %}
openvariable {{
closevariable }}
openbrace {
closebrace }
opencomment {#
closecomment #}
{% templatetag openblock %} url 'entry_list' {% templatetag closeblock %}

url

回与给定视图和可选参数匹配的绝对路径引用(不带域名的URL)。将使用编码生成的路径中的任何特殊字符iri_to_uri()

{% url 'some-url-name' v1 v2 %}

第一个参数是URL模式名称。它可以是带引号的文字或任何其他上下文变量。其他参数是可选的,应该是空格分隔的值,将用作URL中的参数。
或者,您可以使用关键字语法

{% url 'some-url-name' arg1=v1 arg2=v2 %}

verbatim

停止模板引擎呈现此块标记的内容。

常见的用途是允许JavaScript模板层与Django的语法冲突。

{% verbatim %}
    {{if dying}}Still alive.{{/if}}
{% endverbatim %}

widthratio

对于创建条形图等,此标记计算给定值与最大值的比率,然后将该比率应用于常量。

<img src="bar.png" alt="Bar"
     height="10" width="{% widthratio this_value max_value max_width %}" />

在某些情况下,您可能希望捕获widthratio变量的结果。例如,它可以是blocktrans这样的:

{% widthratio this_value max_value max_width as width %}
{% blocktrans %}The width is: {{ width }}{% endblocktrans %}

with

以更简单的名称缓存复杂变量。这在多次访问“昂贵”方法(例如,访问数据库的方法)时很有用。

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

可分配多个变量

内置过滤器参考

过滤器 含义 栗子 结果
add 将参数添加到值 {{ value|add:"2" }} value+2的值
addslashes 在引号前添加斜杠 I'm I\'m
capfirst 将值的第一个字符大写。如果第一个字符不是字母,则此过滤器无效。 {{ value|capfirst }} v->V
center 将值置于给定宽度的字段中 {{ value|center:"5" }} " 1 "
cut 从给定的字符串中删除arg的所有值 {{ value|cut:" " }} 删除value的空格
default value的计算结果为False,则使用给定的默认值。否则,使用该值 {{ value|default:"nothing" }} 空字符串也是False
default_if_none 如果(且仅当)值为None,则使用给定的默认值。否则,使用该值。 {{ value|default_if_none:"nothing" }} value是None,输出将是nothing。
dictsort 获取字典列表并返回按参数中给出的键排序的列表 {{ value|dictsort:"name" }} 根据name排序并返回(也可以根据索引排序)
dictsortreversed 返回反序 与上面用法一致 列表反序
divisibleby 如果值可以被参数整除,返回True {{ value\divisibleby:"3" }} value=21输出True
escape 转义字符串的HTML {% autoescape off %} {{ title|escape }}{% endautoescape %} 转义
escapejs 转义用于JavaScript字符串的字符 {{ value|escapejs }} w
filesizeformat 格式,如一个“人类可读”的文件大小的值 {{ value|filesizeformat }} 123456789=117.7 MB
first 返回列表中的第一个项目 {{ value|first }} ['1','2']=1
floatformat 浮点数格式化
force_escape 将HTML转义应用于字符串 -- --
get_digit 给定一个整数,返回请求的数字,其中1是最右边的数字,2是第二个最右边的数字,等等。返回无效输入的原始值 {{ value|get_digit:"2" }} 1234->3
iriencode 将IRI(国际化资源标识符)转换为适合包含在URL中的字符串。
join 使用字符串连接列表 {{ value|join:" // " }} [1,2,3]--123
last 返回列表中的最后一项 {{ value|last }} [1,2,3]--3
length 列表长度 {{ value|length }} [1,2,3]----3
length_is 判断长度 {{ value|length_is:"4" }} 返回True or False
linebreaks 换行 {{ value|linebreaks }} \n-->
linebreaksbr 所有换行z转行 {{ value|linebreaksbr }} 参照上一个
linenumbers 显示带行号的文本 {{ value|linenumbers }} 1.a 2.b
ljust 左对齐给定宽度的字段中的值 {{ value|ljust:"10" }} "djano(补空格)"
lower 将字符串转换为全部小写 {{ value|lower }} T---t
make_list 返回变为列表的值 整数强转字符 213---['2','1','3']
phone2numeric 电话号码(字母)转换其等效数字 800-COLLECT 800-2655328
pluralize 如果值不是1,则返回复数后缀 加's' 可以指定复数后缀
pprint 一个包装pprint.pprint()- 用于调试 --
random 返回给定列表中的随机项 {{ value|random }} 随机
rjust 右对齐 类比左对齐
safe 字符串标记为在输出之前不需要进一步的HTML转义。当自动关闭时,此过滤器无效 {{ var|safe|escape }} 源码打印
slice 返回列表的切片 {{ some_list slice:":2" }} 同python
slugify 转换为ASCII。将空格转换为连字符。删除不是字母数字,下划线或连字符的字符。转换为小写。还剥去前导和尾随空格 {{ value|slugify } 参考slug
stringformat 格式化字符串输出 {{ value|stringformat:"E" }} 1.0E+01
striptags 尽一切努力去除所有[X] HTML标记 {{ value|striptags }} 不保证
time 根据给定的格式格式化时间 {{ value|time:"H:i" }} eoTzHi
title 字符串大写开头 {{ value|title }}
truncatechars 字符串截断 {{ value|truncatechars:9 }} qweyuyiyq......
truncatechars_html 同上 保留换行符 右标签
truncatewords 按单词个数截断 。。。
truncatewords_html 同上
unordered_list 归地获取自嵌套列表并返回HTML无序列表 - 没有打开和关闭<ul>标记。 这个牛!!!
upper 全部大写
urlencode 转义值以在URL中使用
urlize 将文本中的URL和电子邮件地址转换为可单击的链接
urlizetrunc 同上 但会截断
wordcount 单词数
wordwrap 在指定的行长度处包装单词 没排字符数

add
此过滤器将首先尝试将两个值强制转换为整数。如果失败,它将尝试将值加在一起。这将适用于某些数据类型(字符串,列表等),而对其他数据类型则失败。如果失败,结果将为空字符串。
(escape)
< 转换为 <
> 转换为 >
' (单引号)转换为 '
" (双引号)转换为 "
& 转换为 &
linebreaks
用适当的HTML替换纯文本中的换行符; 单个换行符成为HTML换行符(),后面跟空行的换行符成为段落符号()。<br /></p>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容

  • 声明:转载请注明出处http://www.jianshu.com/p/1664dcfd840c 最近在折腾Djan...
    蛇发女妖阅读 6,251评论 1 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,352评论 0 5
  • 介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker...
    ZhouLang阅读 7,825评论 0 2
  • 模板 模板就是一个简单的文本文件,它可以生成任何文本格式(HTML,XML,CSV等)。 模板中包含变量和标签,当...
    Zoulf阅读 564评论 0 0
  • 情绪不高,很多原因,自己想了下,最根本的原因是自己想要的太多,而能付出的太少
    小巨丑的阅读 96评论 0 0