测试开发之Django——No6.Django模板中的标签语言
模板中的标签语言
1.if/else
{% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if %} 和
{% endif %}直接的任何内容。
例如:
{% if a %}
<p>Welcome to the weekend!</p>
{% endif %}
{% else %} 和 {% elif %} 标签是可选的
当然,是在根据需要来决定是否需要使用这个标签
2.布尔运算符
if标签可以使用and
,or
或not
测试多个变量或否定给定变量:
{% 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 and
和or
子句, 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 in
is
is 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>
4 autoescape
控制当前的自动转义行为。此标记采用on
或 off
作为参数,并确定自动转义是否在块内生效。该块以endautoescape
结束标记关闭。
当自动转义生效时,所有变量内容都会在将结果放入输出之前对其应用HTML转义(但在应用任何过滤器之后)。这相当于手动将escape
过滤器应用于每个变量。
唯一的例外是已经标记为“安全”的变量,无论是通过填充变量的代码,还是因为它已经应用了safe
或escape
过滤器。
{% 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 %}
cities
country
country_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模板中的标签语言的更多相关文章
- django的html模板中获取字典的值
在django的html模板中获取字典中的值应当直接使用 字典.[key] 的方式 {% for i in lists %} <li id="{{i.id}}" class ...
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...
- 测试开发之Django——No3.Django中的试图(views)
说到views,我们先来说django中执行的一个顺序. 我们打开一个django中配置的页面,之后的执行是有这么几个步骤: 1.系统配置的urls中寻找是否配置了这个地址: 2.如果已经配置了这个地 ...
- 测试开发之Django——No1.介绍以及引申
前言 > 测试行业发展飞速,自动化测试兴起,由此对测试人员的要求与日俱增.随时而来的,就是职能的增加. > 首先需要学习的,就是自动化测试.而由自动化测试引申而来的,就是另外几个新增的岗位 ...
- Django 模板中 include 标签使用小结
include 标签允许在模板中包含其它的模板的内容. 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串. 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 { ...
- django学习-7.html模板中include标签使用场景
1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...
- 微信小程序开发之formId使用(模板消息)
基于微信小程序的模板消息:基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.模板推送位置:服务通知模板下发条件:用户本人在微信体系内与页面有交互 ...
- smarty模板中literal标签的使用
在使用的时候把js等代码写在模板中就报错,加入literal标签后就正确了 <style> {literal} .tr_color{background-color: #9F88FF} { ...
- DEDECMS模板中dede标签使用php和if判断语句的方法
先来看看下面这个标签{dede:field.tong_gg php=yes}if(@me==""||empty(@me))@me="<p>无</p> ...
随机推荐
- 用socket写一个简单的客户端和服务端程序
用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...
- svg标签
在页面上画图无非有两种方法,一种是canvas,另外一种就是svg了,canvas之前已经介绍过了,现在来介绍一下svg吧. 其实早在svg出现以前几年,微软已经推出了类似的东西,叫做vml,早期是为 ...
- 使用sklearn进行数据挖掘
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- JavaSE学习总结(五)——封装,继承,多态很简单
java面向对象的三大特性是:封装.继承与多态,是面向对象编程的核心. 一.封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口. 封装:封装也称信息隐藏,是指利用抽象数据类型把 ...
- 4、Python-列表
列表格式 # 元素可以是不同类型的 namesList = [1, 'xiaoZhang', 'xiaoHua'] print(namesList[0]) print(namesList[1]) pr ...
- 数据结构(六)查找---多路查找树(B+树)
前提 下图B树,我们要遍历它,假设每个节点都属于硬盘的不同页面,我们为了中序遍历所有的元素,页面2-页面1-页面3-页面1-页面4-页面1-页面5.而且我们每经过节点遍历时,都会对节点中的元素进行一次 ...
- python---redis缓存页面实现
import tornado.web from controllers.BaseController import BaseRequestHandler import redis pool = red ...
- javascript 迭代与递归
<script type="text/javascript"> // //原生js // window.onload = function(){ // var btn ...
- CentOS6.8下搭建zookeeper web界面查看工具node-zk-browser
zookeeper的web界面查看工具Node-ZK-Browser的界面是用nodejs写的今天试着搭建了下. 1. 安装nodejs [root@localhost product]# pwd / ...
- Ubuntu 16.04下安装zsh和oh-my-zsh
注意:安装前先备份/etc/passwd 一开始装oh-my-zsh我是拒绝的,因为这东西安装容易,卸载难,真的很难. Mac安装参考:http://www.cnblogs.com/EasonJim/ ...