零、前言
上篇文章,我们介绍了动态路由,通过匹配URL来返回对应内容。
本篇文章,我们讲解HTML页面和jinja2语法
一、返回HTML页面
在 Python 中生成 HTML 并不好,因为需要考虑很多转义的问题。但是Flask提供了方法render_template() 来渲染模版。
# app.py
from flask import Flask
from flask import render_template
app = Flask(__name__)
# (1) 声明一个动态路由
@app.route('/hello/<string:name>')
def hello(name):
# (2) 返回HTML模板和其对应的参数
# !! HTML模板的名字为hello.html,我们下面创建文件时,一定要与之对应
return render_template('hello.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
上面代码中(1)使用了我们上篇文章的动态路由,而(2)出使用了渲染模板的函数。
接下来就有小伙伴问了,我们的HTML要放在那里?
答:在上面代码同级的目录创建一一个目录,名称为templates
(一定要是这个名字),我们创建一个名称为hello.html
文件(上文中提到过这个名字),书写如下代码:
<!doctype html>
<html lang="en">
<head>
<title>Hello from Flask</title>
</head>
<body>
<h1>Hello {{ name }}!</h1>
</body>
</html>
- 特别注意一下,h1标题后的name,一定要用{{}}括起来,因为它属于Flask传入进来的变量
Q & A
- Q: 在使用render_template渲染页面时,抛出AttributeError: ‘Token’ object has no attribute 'test’异常。
回答:错误原因,Python3.6.0与Jinja2 3.0.1不兼容,解决方法:升级Python解释器,使用3.6.0以上版本。降级Jinja2 ,使用3.0.1以下版本