[TOC]
django模板是一个string文本,用来从python代码中分离一个文档和展现数据。
模板通常用来输出HTML,由HTML代码和模板标签组成。
## 模板标签
模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
### 变量
{{ var_name }}
双大括号括起来的为变量,用于把数据插入HTML代码中。
### 标签
{% load staticfiles %}
大括号和%括起来的为标签(tag),通常用来实现简单的逻辑。
#### 常用的标签
##### if标签
{% if %}
if语句,可以用not,and,or来控制逻辑,但是不允许not,or同时出现,支持{% elif %}、{% else %}用法,符合条件显示块中内容。需要{% endif %}结束标签
示例:
```html
{% if num > 100 or num < 0 %}
<p>无效</p>
{% elif num > 80 and num < 100 %}
<p>优秀</p>
{% else %}
<p>辣鸡</p>
{% endif %}
```
##### ifequal和ifnotequal
比较是否相等,符合条件显示块中内容,只限于简单的类型,比如字符串、整数、小数的比较,列表、字典、元组不支持。需要结束标签{% endifequal %}。
示例:
```html
{% ifequal num1 num2 %}
<h1>嘻嘻</h1>
{% endifequal %}
```
##### for标签
{% for %}
用来循环一个list,还可以使用reserved关键字来进行倒序遍历,一般可以用if语句来西先判断一下列表是否为空,在进行遍历。需要结束标签{% endfor %}
```
<ul>
{% for i in list1 %}
<li>{{ i }}</li>
{% endfor %}
</ul>
```
{{ foroop.counter }} 指示for标签循环了多少次
##### 注释
{# 注释 #}
##### url
{% url %}
引入地址
```
{% url a:b c %}
```
以a开头,b结尾的url,第三个参数会插在中间
渲染结果:
```
a/c/b
```
...
#### 过滤器
可以使用过滤器对值进行处理。
1. add 给变量加上相应的值
```
{{ value|add:"2" }}
```
2. addslashes
给变量中的引号(双引号、单引号)前加上斜线
3. capfirst
首字母大写
4. cut
从字符串中移除指定的字符
{{ value|cut:" " }}
5. date
格式化日期字符串
6. lower
内容转为小写
```
{{ "ABCD"|lower }}
```
7. join
以指定符号连接列表中的值
```
{{ list|join:"," }}
```
8. safe
解除转义
...
## 模板标签
模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
### 变量
{{ var_name }}
双大括号括起来的为变量,用于把数据插入HTML代码中。
### 标签
{% load staticfiles %}
大括号和%括起来的为标签(tag),通常用来实现简单的逻辑。
#### 常用的标签
##### if标签
{% if %}
if语句,可以用not,and,or来控制逻辑,但是不允许not,or同时出现,支持{% elif %}、{% else %}用法,符合条件显示块中内容。需要{% endif %}结束标签
示例:
```html
{% if num > 100 or num < 0 %}
<p>无效</p>
{% elif num > 80 and num < 100 %}
<p>优秀</p>
{% else %}
<p>辣鸡</p>
{% endif %}
```
##### ifequal和ifnotequal
比较是否相等,符合条件显示块中内容,只限于简单的类型,比如字符串、整数、小数的比较,列表、字典、元组不支持。需要结束标签{% endifequal %}。
示例:
```html
{% ifequal num1 num2 %}
<h1>嘻嘻</h1>
{% endifequal %}
```
##### for标签
{% for %}
用来循环一个list,还可以使用reserved关键字来进行倒序遍历,一般可以用if语句来西先判断一下列表是否为空,在进行遍历。需要结束标签{% endfor %}
```
<ul>
{% for i in list1 %}
<li>{{ i }}</li>
{% endfor %}
</ul>
```
{{ foroop.counter }} 指示for标签循环了多少次
##### 注释
{# 注释 #}
##### url
{% url %}
引入地址
```
{% url a:b c %}
```
以a开头,b结尾的url,第三个参数会插在中间
渲染结果:
```
a/c/b
```
...
#### 过滤器
可以使用过滤器对值进行处理。
1. add 给变量加上相应的值
```
{{ value|add:"2" }}
```
2. addslashes
给变量中的引号(双引号、单引号)前加上斜线
3. capfirst
首字母大写
4. cut
从字符串中移除指定的字符
{{ value|cut:" " }}
5. date
格式化日期字符串
6. lower
内容转为小写
```
{{ "ABCD"|lower }}
```
7. join
以指定符号连接列表中的值
```
{{ list|join:"," }}
```
8. safe
解除转义
...
## 模板继承
当你写好了一个骨架模板之后,可以用模板继承,在子模版中使用父模板的代码,并修改父模板的部分内容。
父模板一般命名为base.html,它定义了一些简单的网页框架,然后在子模版中填上其他内容。
base.html
```
<html>
<body>
<h4>图书系统</h4>
{% block main %}
<a href="#">图书列表</a>
{% endblock main %}
</body>
</html>
```
显示效果如下:
![](https://box.kancloud.cn/fb074da345c3e3c2e8a9ece3a7023250_410x179.png)
继承:
{% extends 'base.html' %}
在子模版中使用extends继承父模板
books.html
```
{% extends 'polls/books.html' %}
{% block main %}
<ul>
<li>西游记</li>
</ul>
{% endblock main %}
```
显示效果如下:
![](https://box.kancloud.cn/ce558e415e64364ad0f73af1a310fa44_538x234.png)
`block` 标签中的内容已经被替换掉了,如果不写自定义内容的话,将继续使用父模板的内容。
可以用super获取父模板block的内容:
```
{% extends 'polls/books.html' %}
{% block main %}
<ul>
{{ block.super }}
<li>西游记</li>
</ul>
{% endblock main %}
```
![](https://box.kancloud.cn/263e934d08581e2bc0f7fc721304e9d5_431x159.png)
django模板是一个string文本,用来从python代码中分离一个文档和展现数据。
模板通常用来输出HTML,由HTML代码和模板标签组成。
- 1.介绍
- 2.工程搭建
- 2.1.环境配置
- 2.2.创建工程
- 2.3.创建子应用
- 2.3.1.pycharm打开项目
- 2.4.创建视图
- 3.基本配置
- 3.1.settings基本配置项
- 3.2.路由配置
- 4.请求响应
- 4.1.request
- 4.2.response
- 4.3.cookie
- 4.4.session
- 5.类视图中间件
- 5.1.类视图
- 5.2中间件
- 6.数据库
- 6.1.数据库配置
- 6.2定义模型类
- 6.3数据库迁移
- 6.4数据库操作
- 6.5查询集
- 6.6模型管理器
- 7.模板表单
- 7.1使用模板
- 7.2模板标签
- 7.3表单
- 8.后台管理
- 8.1Admin
- 8.2自定义模型类样式
- 8.3列表页