作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。
模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。 模板引擎使用该TEMPLATES设置进行配置。这是一个配置列表,每个引擎一个。
默认值为空。在 settings.py由所产生的startproject命令定义一个更有用的值:
在做下面模板配置的同时,也要在项目的根目录下创建一个templates目录
# 项目目录下的settings.py配置文件添加TEMPLATES中的DIRS配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
模板语法
1.变量
-
变量输出语法
{ { var } } -
当模版引擎遇到一个变量,将计算这个变量,然后将结果输出
-
变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
-
当模版引擎遇到点("."),会按照下列顺序查询:
- 字典查询,例如:foo["bar"]
- 属性或方法查询,例如:foo.bar
- 数字索引查询,例如:foo[bar]
-
如果变量不存在, 模版系统将插入'' (空字符串)
-
在模板中调用方法时不能传递参数
2.标签
-
语法
{ % tag % } -
作用
- 在输出中创建文本
- 控制循环或逻辑
- 加载外部信息到模板中
for标签
{ % for ... in ... % }
循环逻辑
{ % endfor % }
if标签
{ % if ... % }
逻辑1
{ % elif ... % }
逻辑2
{ % else % }
逻辑3
{ % endif % }
comment标签
{ % comment % }
多行注释
{ % endcomment % }
include:加载模板并以标签内的参数渲染
{ % include "base/index.html" % }
url:反向解析
{ % url 'name' p1 p2 % }
csrf_token:这个标签用于跨站请求伪造保护
{ % csrf_token % }
3.过滤器
-
语法:
{ { 变量|过滤器 } },例如{ { name|lower } },表示将变量name的值变为小写输出 -
使用管道符号 (|)来应用过滤器
-
通过使用过滤器来改变变量的计算结果
-
关闭HTML自动转义
{ { data|safe } } -
可以在if标签中使用过滤器结合运算符
if list1|length > 1 -
过滤器能够被“串联”,构成过滤器链
name|lower|upper -
过滤器可以传递参数,参数使用引号包起来
list|join:", " -
default:如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量的值
value|default:"什么也没有" -
date:根据给定格式对一个date变量格式化
value|date:'Y-m-d'
4.注释
- 单行注释
{# 注释 #}
- 多行注释
{% comment %}
多行注释
{% endcomment %}
5.模板运算
-
加
{ { value|add:10 } } note:value=5,则结果返回15 -
减
{ { value|add:-10 } } note:value=5,则结果返回-5,加一个负数就是减法了 -
乘
{ % widthratio 5 1 100 % } note:等同于:(5 / 1) * 100 ,结果返回500, withratio需要三个参数,它会使用参数1/参数2*参数3的方式进行运算,进行乘法运算,使「参数2」=1 -
除
{ % widthratio 5 100 1 % } note:等同于:(5 / 100) * 1,则结果返回0.05,和乘法一样,使「参数3」= 1就是除法了。