一个网页可以抽象为表现逻辑业务逻辑的组合。模板就是用来描述表现逻辑的HTML页面

表现逻辑:HTML元素+变量占位符(+变量过滤器)+控制结构

变量占位符

1
2
3
4
<p>{{ dic['key'] }}</p> <!--字典访问-->
<p>{{ list[idx] }}</p> <!--列表访问-->
<p> {{ obj.method() }} </p> <!--对象方法访问-->
<p> {{ name|filter }} </p> <!--对变量name的值使用filter过滤器处理-->

变量过滤器

过滤器名 作用
safe 渲染时不进行转义
capitalize 首字母大写,其余小写
lower 转小写
upper 转大写
title 每个单词首字母转大写
trim 去除首尾空格
striptags 渲染前去除值中的HTML标签

控制结构

1
2
3
4
5
6
7
8
9
10
{% if x %}
<p>x</p>
{% else %}
<p>404</p>
{% endif %}


{% for line in lines %}
<li>line</li>
{% endfor %}

模板使用示例

如图,模板文件(HTML)放入templates文件夹。

Flask项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!--hello.html-->
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Title</title>
</head>

<body>
<h2>我是模板</h2>
{{my_int}}
<br>
{{my_str}}
<br>
{{my_list}}
<br>
{{my_dict}}
<hr>
<h2>模板的list数据获取</h2>
<hr>
{{my_list[0]}}
<br>
{{my_list.1}}
<hr>
<h2>字典数据获取</h2>
<hr>
{{my_dict['name']}}
<br>
{{my_dict.age}}
<hr>
<h2>算术运算</h2>
<br>
{{my_list.0 + 10}}
<br>
{{my_list[0] + my_list.1}}
</body>
</html>

  1. flask包导入render_template模块。
  2. 视图函数的返回值变为render_template('template_name', **args)。(将args参数传入模板template_name中进行渲染)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
#传递数据
my_str = 'Hello Word'
my_int = 10
my_array = [3, 4, 2, 1, 7, 9]
my_dict = {
'name': 'xiaosang',
'age': 20
}
return render_template('hello.html', my_str = my_str, \
my_int = my_int, my_list = my_array, my_dict = my_dict)

if __name__ == '__main__':
app.run(debug = True)