跳到主要内容

Flask 模板

在前面的实例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。

视图函数有两个作用:

  • 处理业务逻辑
  • 返回响应内容

在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.

  • 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取
  • 使用真实值替换变量,再返回最终得到的字符串,这个过程称为'渲染'
  • Flask 是使用 Jinja2 这个模板引擎来渲染模板

使用模板的好处

  • 视图函数只负责业务逻辑和数据处理(业务逻辑方面)
  • 而模板则取到视图函数的数据结果进行展示(视图展示方面)
  • 代码结构清晰,耦合度低

模板基本使用

在项目下创建 templates 文件夹,用于存放所有模板文件,并在目录下创建一个模板文件 html 文件 hello.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我的模板html内容
</body>
</html>

创建视图函数,将该模板内容进行渲染返回

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def index():    return render_template('hello.html')

模板变量

代码中传入字符串,列表,字典到模板中

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def index():    # 往模板中传入的数据    my_str = 'Hello Word'    my_int = 10    my_array = [3, 4, 2, 1, 7, 9]    my_dict = {        'name': 'xiaoming',        'age': 18    }    return render_template('hello.html',                           my_str=my_str,                           my_int=my_int,                           my_array=my_array,                           my_dict=my_dict                           )

模板中代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我的模板html内容
<br />{{ my_str }}
<br />{{ my_int }}
<br />{{ my_array }}
<br />{{ my_dict }}
</body>
</html>

运行效果

我的模板html内容
Hello Word
10
[3, 4, 2, 1, 7, 9]
{'name': 'xiaoming', 'age': 18}

示例代码:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def index():    my_int = 18    my_str = 'curry'    my_list = [1, 5, 4, 3, 2]    my_dict = {        'name': 'durant',        'age': 28    }    # render_template方法:渲染模板    # 参数1: 模板名称  参数n: 传到模板里的数据    return render_template('hello.html',                           my_int=my_int,                           my_str=my_str,                           my_list=my_list,                           my_dict=my_dict)if __name__ == '__main__':    app.run(debug=True)
<!DOCTYPE html><html lang="en"><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>