-
目录结构
project/ # 工程目录 manage.py # 启动控制文件 templates/ # 模板文件目录
-
模板渲染
-
在
templates
目录下创建一个模板文件index.html
,在其中写入页面内容 -
在视图函数中渲染模板:
render_template('index.html')
-
渲染模板字符串:
render_template_string('<h1>渲染模板字符串</h1>')
-
设置模板文件自动加载:
app.config['TEMPLATES_AUTO_RELOAD'] = True
,调试模式会自动加载
-
-
使用变量
-
需要解析的变量需要放在
{{ }}
中 -
渲染模板文件时需要传递相关变量:
render_template('var.html', name='goudan')
-
注释写在
{# #}
中
-
-
使用过滤器
过滤器 说明 upper 全大写 lower 全小写 title 每个单词首字母大写 capitalize 首字母大写 trim 去掉两边的空白 striptags 过滤HTML标签 safe 渲染时不转义(默认全部转义),只能使用在信任的变量渲染 -
说明:过滤器就是对要解析的变量进行特定的处理,然后再输出。
-
使用:
{{ 变量|过滤器 }}
,如:{{ name|upper }}
,就是将name转换为全大写输出 -
常用过滤器:
-
动态开启关闭渲染转义
-
{# 动态开启关闭转义 #}
{% autoescape False %}
<div>{{ user }}</div>
{% endautoescape %}
-
流程控制
-
{% if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello World!</h1> {% endif %} <ol> {% for i in range(5) %} <li>{{ i }}</li> {% endfor %} </ol>
-
文件包含
-
说明:
当有多处相同的显示效果出现时,将内容单独提取出来,需要的地方直接包含进来即可。包含另一个文件,相当将其中的内容直接粘贴过来,避免了大量重复书写(复制粘贴)
-
使用:
{% include 'include2.html' %}
-
-
宏的使用
-
定义宏:
{% macro 宏名(参数) %}宏内容{% endmacro %}
-
调用宏:
{{ 宏名(参数) }}
-
导入宏:
{% from '宏所在文件' import 宏名 %}
-
说明:宏采用了类似于python中的函数进行定义和调用,可以减少代码的重复书写,而且比较灵活。
-
-
模板继承
-
说明:当一个网站的多个页面都很相似,只要细微的差别,可以通过模板继承减少重复书写。
-
- 使用:
-
parents.html
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}基础模板标题{% endblock %}</title>
</head>
<body>
{% block body %}<div>默认内容</div>{% endblock %}
</body>
</html>
-
children.html
{# 继承自另一个模板 #}
{% extends 'parents.html' %}
{# 根据block可以修改原有的block内容 #}
{% block title %}子模板标题{% endblock %}
{% block body %}
{# 保留基础模板中的内容 #}
{{ super() }}
<div>新加的内容</div>
{% endblock %}
提醒:若在子模板重写了一个block,原来的显示效果全丢了,八成的原因是忘记书写{{ super() }}