一、模板介绍
模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。
创建文件夹:在应用中创建templates文件夹
创建文件:在templates文件夹中创建页面文件
模板语言包含如下内容:
- 变量
- 标签
- 过滤器
- 注释
二、变量
语法:{ {variable}}
注意事项:
- 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出
- 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
- 当模版引擎遇到点("."),会按照下列顺序查询:
- 字典查询,例如:foo["bar"]
- 属性或方法查询,例如:foo.bar
- 数字索引查询,例如:foo[bar]
- 如果变量不存在, 模版系统将插入'' (空字符串)
- 在模板中调用方法时不能传递参数
例如:
{
{hero.showName}}
三、标签(标签和过滤器官方文档)
3.1、autoescape
控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效。该块以endautoescape结束标签关闭。
{% autoescape on %} { { body }} {% endautoescape %}
3.2、block
定义可以被子模板覆盖的块,为模板继承时使用
示例:
base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> {% block head %} {% endblock %} </head> <body> <h1>logo</h1> <hr> {% block content%} <h1>abc</h1> {% endblock %} <hr> <h1>contact</h1> </body> </html>
index.html继承base.html
{% extends 'booktest/base.html' %} {% block content %} <h1>123</h1> {% endblock content %}
3.3、comment
注释,{% comment %} 和 {% endcomment %}之间的内容被解释为注释
3.4、crsf_token
一个防止CSRF攻击(跨站点请求伪造)的标签
3.5、cycle
多次循环迭代,给定的值,每次遇到此标签就会生成一个参数对应第一个,如此类推,如循环完没有参数了则继续从头开始循环。
<ul> <li>{% cycle 'one' 'two' 'three' 'four' as infocycle %}</li> <li>{% cycle infocycle %}</li> <li>{% cycle infocycle %}</li> <li>{% cycle infocycle %}</li> <li>{% cycle infocycle %}</li> <li>{% cycle infocycle %}</li> <li>{% cycle infocycle %}</li> </ul>
3.6、debug
输出整个调试信息,包括当前上下文和导入的模块。
3.7、extends
表示该模板扩展了父模板,这个标签有两种使用方式:
- "base.html"作为父模板的名称来扩展
{% extends "base.html" %}
- 使用的变量variable。如果变量的计算结果为字符串,Django将使用该字符串作为父模板的名称。如果变量评估为一个Template对象,Django将使用该对象作为父模板。
{% extends variable %}3.8、filter
通过一个或多个过滤器对内容过滤。 作为灵活可变的语法,多个过滤器被管道符号相连接,且过滤器可以有参数。
注意块中所有的内容都应该包括在filter 和endfilter 标签中。
{% filter force_escape|lower %} ... {% endfilter %}
3.9、firstof
输出第一个值不等于False的变量
{% firstof var1 var2 var3 %}
如果所有传递的变量都是False,还可以使用文字字符串作为返回值
{% firstof var1 var2 var3 "fallback value" %}
3.10、for
循环输出数组中的每个项目,使项目在上下文变量中可用。
循环列表的值:
<ul> {% for item in list %} <li>{ { item }}</li> {% endfor %} </ul>
可以使用reversed反向循环列表:
<ul> {% for item in list reversed %} <li>{ { item }}</li> {% endfor %} </ul>列表可以使用嵌套循环:
<ul> {% for x in list %} {% for y in x %} <li>{ { y }}</li> {% endfor %} {% endfor %} </ul>字典循环,可以使用items方法得到字典的建和值:
<ul> {% for k,v in row.items %} <li>{ { k }}={ { v }}</li> {% endfor %} </ul>for循环再循环中设置的变量:
- forloop.counter --- 循环的当前迭代索引从1开始计数
- forloop.counter0 --- 循环当前迭代的索引从0开始计数
- forloop.revcounter --- 循环结束时的迭代次数(1索引)
- forloop.revcounter0 --- 循环结束时的迭代次数(0索引)
- forloop.first --- 如果这是通过循环的第一次,则为真
- forloop.last --- 如果这是通过循环的最后一次,则为真
- forloop.parentloop --- 对于嵌套循环,这是围绕当前循环的循环
<body>