模板中的标签语言

1.if/else

{% if  %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if  %} 和

{% endif %}直接的任何内容。

例如:

{% if a %}

  <p>Welcome to the weekend!</p>

{% endif %}

{% else %} 和 {% elif %} 标签是可选的

当然,是在根据需要来决定是否需要使用这个标签

2.布尔运算符

if标签可以使用andornot测试多个变量或否定给定变量:

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

允许在同一标记内使用both andor子句, and优先级高于or例如:

{% if athlete_list and coach_list or cheerleader_list %}

将被解释为:

if (athlete_list and coach_list) or cheerleader_list

if标记中使用实际括号是无效的语法。如果需要它们来指示优先级,则应使用嵌套if标记。

if标签也可以使用运营商==!=<>, <=>=in,,,和它的工作如下:not inisis not

== 运算符:等于

!= 运算符:不等于

>  运算符:大于

<   运算符:小于

<= 运算符:小于等于

>= 运算符:大于等于

in  运算符:包含在内

not in 运算符:不包含

is 运算符:对象身份的判断,测试两个只是否是同一个对象

not is 运算符:测试两个是是否不是同一个对象

表达式的运算符优先规则(优先级从低到高):

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

模板系统中,只有下面几种情况的布尔值是False:

1)空列表

2)空元组

3)空字符串

4)零值

5)特殊对象none

6)对象false

3.for

循环遍历数组中的每个项目,使项目在上下文变量中可用。例如,要显示以下提供的运动员列表 athlete_list

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

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

如果需要循环列表列表,可以将每个子列表中的值解压缩为单个变量。例如,如果您的上下文包含调用的(x,y)坐标列表points,则可以使用以下内容输出点列表:

 
{% for x, y in points %}
There is a point at {{ x }},{{ y }}
{% endfor %}

  

for循环设置循环中可用的许多变量:

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

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

<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>

  

autoescape

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

当自动转义生效时,所有变量内容都会在将结果放入输出之前对其应用HTML转义(但在应用任何过滤器之后)。这相当于手动将escape 过滤器应用于每个变量。

唯一的例外是已经标记为“安全”的变量,无论是通过填充变量的代码,还是因为它已经应用了safeescape过滤器。

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

  

5.block

定义可由子模板覆盖的块,例如:

{% block title %}{{ section.title }}{% endblock %}

  

6.comment

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

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

  comment 标签不能嵌套

7.csrf_token

此标记用于CSRF保护

8.extends

表示此模板扩展父模板的信号。

此标记可以以两种方式使用:

  • {% extends "base.html" %}(带引号)使用文字值 "base.html"作为要扩展的父模板的名称。
  • {% extends variable %}使用的值variable。如果变量求值为字符串,Django将使用该字符串作为父模板的名称。如果变量求值为一个Template对象,Django将使用该对象作为父模板。

有关更多信息,请参见模板继承

通常,模板名称相对于模板加载器的根目录。字符串参数也可以是以./或开头的相对路径../

9.include

加载模板并使用当前上下文呈现它。这是一种在模板中“包含”其他模板的方法。

模板名称可以是单引号或双引号中的变量或硬编码(带引号)字符串。

此示例包含模板的内容"foo/bar.html"

{% include "foo/bar.html" %}

  

您可以使用关键字参数将其他上下文传递给模板:

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

  

10.load

加载自定义模板标记集。

{% load static %}

  加载静态资源文件

11.now

使用根据给定字符串的格式显示当前日期和/或时间。此类字符串可以包含格式说明符字符,如date过滤器部分中所述。

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

请注意,如果要使用“原始”值,则可以反斜杠转义格式字符串。在此示例中,“o”和“f”都是反斜杠转义的,因为否则每个都是一个格式字符串,分别显示年份和时间:

It is the {% now "jS \o\f F" %}

您还可以使用语法将输出(作为字符串)存储在变量中。如果要在模板标记内部使用 ,例如:{% now "Y" ascurrent_year %}{% now %}blocktrans

{% now "Y" as current_year %}
{% blocktrans %}Copyright {{ current_year }}{% endblocktrans %}

  

12.regroup

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

这个复杂的标签,最好是用一个例子来说明:说不说cities 是包含字典代表城市的名单"name""population""country"键:

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'},
]

  

..并且您希望显示按国家/地区排序的分层列表,如下所示:

  • 印度

    • 孟买:19,000,000
    • 加尔各答:15,000,000
  • 美国
    • 纽约:20,000,000
    • 芝加哥:7,000,000
  • 日本
    • 东京:33,000,000

您可以使用标记按国家/地区对城市列表进行分组。以下代码片段代码将实现此目的:{% regroup %}

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

  

让我们来看看这个例子。有三个参数:要重新组合的列表,要分组的属性以及结果列表的名称。在这里,我们按 属性重新组合列表并调用结果。{% regroup %}citiescountrycountry_list

{% regroup %}生成一个组对象的列表(在本例中country_list) 。组对象是包含两个字段的实例 :namedtuple()

  • grouper - 按分组的项目(例如,字符串“India”或“Japan”)。
  • list - 该组中所有项目的列表(例如,所有具有country ='India'的城市的列表)。

使用dictsort过滤器对模板中的数据进行排序 ,如果您的数据位于词典列表中

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

对其他属性进行分组

任何有效的模板查找都是regroup标记的合法分组属性,包括方法,属性,字典键和列表项。例如,如果“country”字段是具有属性“description”的类的外键,则可以使用

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

  

13.url

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

这是一种通过在模板中对URL进行硬编码来输出链接而不违反DRY原则的方法:

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

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

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

  

14.widthratio

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

如果this_value是175,max_value是200,并且max_width是100,则上例中的图像将是88像素宽(因为175/200 = .875; .875 * 100 = 87.5,其被舍入到88)。

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

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

  

15.with

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

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

  

填充的变量(在上面的示例中total)仅在和标记之间可用。{% with %}{% endwith %}

您可以分配多个上下文变量:

{% with alpha=1 beta=2 %}
...
{% endwith %}

  

测试开发之Django——No6.Django模板中的标签语言的更多相关文章

  1. django的html模板中获取字典的值

    在django的html模板中获取字典中的值应当直接使用 字典.[key] 的方式 {% for i in lists %} <li id="{{i.id}}" class ...

  2. 测试开发之Django——No4.Django中前端框架的配置与添加

    我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...

  3. 测试开发之Django——No3.Django中的试图(views)

    说到views,我们先来说django中执行的一个顺序. 我们打开一个django中配置的页面,之后的执行是有这么几个步骤: 1.系统配置的urls中寻找是否配置了这个地址: 2.如果已经配置了这个地 ...

  4. 测试开发之Django——No1.介绍以及引申

    前言 > 测试行业发展飞速,自动化测试兴起,由此对测试人员的要求与日俱增.随时而来的,就是职能的增加. > 首先需要学习的,就是自动化测试.而由自动化测试引申而来的,就是另外几个新增的岗位 ...

  5. Django 模板中 include 标签使用小结

    include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...

  6. django学习-7.html模板中include标签使用场景

    1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...

  7. 微信小程序开发之formId使用(模板消息)

    基于微信小程序的模板消息:基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.模板推送位置:服务通知模板下发条件:用户本人在微信体系内与页面有交互 ...

  8. smarty模板中literal标签的使用

    在使用的时候把js等代码写在模板中就报错,加入literal标签后就正确了 <style> {literal} .tr_color{background-color: #9F88FF} { ...

  9. DEDECMS模板中dede标签使用php和if判断语句的方法

    先来看看下面这个标签{dede:field.tong_gg php=yes}if(@me==""||empty(@me))@me="<p>无</p> ...

随机推荐

  1. 用socket写一个简单的客户端和服务端程序

    用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...

  2. svg标签

    在页面上画图无非有两种方法,一种是canvas,另外一种就是svg了,canvas之前已经介绍过了,现在来介绍一下svg吧. 其实早在svg出现以前几年,微软已经推出了类似的东西,叫做vml,早期是为 ...

  3. 使用sklearn进行数据挖掘

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  4. JavaSE学习总结(五)——封装,继承,多态很简单

    java面向对象的三大特性是:封装.继承与多态,是面向对象编程的核心. 一.封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口. 封装:封装也称信息隐藏,是指利用抽象数据类型把 ...

  5. 4、Python-列表

    列表格式 # 元素可以是不同类型的 namesList = [1, 'xiaoZhang', 'xiaoHua'] print(namesList[0]) print(namesList[1]) pr ...

  6. 数据结构(六)查找---多路查找树(B+树)

    前提 下图B树,我们要遍历它,假设每个节点都属于硬盘的不同页面,我们为了中序遍历所有的元素,页面2-页面1-页面3-页面1-页面4-页面1-页面5.而且我们每经过节点遍历时,都会对节点中的元素进行一次 ...

  7. python---redis缓存页面实现

    import tornado.web from controllers.BaseController import BaseRequestHandler import redis pool = red ...

  8. javascript 迭代与递归

    <script type="text/javascript"> // //原生js // window.onload = function(){ // var btn ...

  9. CentOS6.8下搭建zookeeper web界面查看工具node-zk-browser

    zookeeper的web界面查看工具Node-ZK-Browser的界面是用nodejs写的今天试着搭建了下. 1. 安装nodejs [root@localhost product]# pwd / ...

  10. Ubuntu 16.04下安装zsh和oh-my-zsh

    注意:安装前先备份/etc/passwd 一开始装oh-my-zsh我是拒绝的,因为这东西安装容易,卸载难,真的很难. Mac安装参考:http://www.cnblogs.com/EasonJim/ ...