介绍
在 Python 中生成 HTML 并不有趣,实际上相当繁琐,因为你必须自己使用 escape
进行 HTML 转义,以保持应用程序的安全性。因此,Flask 会自动为你配置 Jinja2 模板引擎。模板可以用于生成任何类型的文本文件。对于 Web 应用程序,你主要会生成 HTML 页面,但你也可以生成 markdown、纯文本电子邮件以及其他任何内容。
在本实验中,我们将学习如何使用 Jinja2 模板引擎生成安全且动态的模板。
在 Python 中生成 HTML 并不有趣,实际上相当繁琐,因为你必须自己使用 escape
进行 HTML 转义,以保持应用程序的安全性。因此,Flask 会自动为你配置 Jinja2 模板引擎。模板可以用于生成任何类型的文本文件。对于 Web 应用程序,你主要会生成 HTML 页面,但你也可以生成 markdown、纯文本电子邮件以及其他任何内容。
在本实验中,我们将学习如何使用 Jinja2 模板引擎生成安全且动态的模板。
在这一步中,你将使用 Jinja2 模板引擎实现模板渲染。
rendering_templates.py
文件,首先导入 Flask
类和 render_template
。然后创建一个 Flask
类的实例。from flask import Flask, render_template
app = Flask(__name__)
route()
装饰器创建两个路由 /
和 /<name>
,用于共享一个名为 hello
的视图函数。要渲染模板,你可以使用 render_template()
方法。它由 Flask 提供,用于通过 Jinja2 模板引擎渲染模板。你只需提供模板的名称和要传递给模板引擎的变量作为关键字参数。在视图函数中,我们使用 render_template()
方法渲染模板 hello.html
,并传递一个名为 name
的变量。@app.route('/')
@app.route('/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
main
入口点,用于在某个端口(例如 port=5000)启动 Flask 应用程序。然后启用 debug
模式。if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
templates
的文件夹,并在该文件夹下创建一个名为 hello.html
的文件。可以通过在终端中执行以下命令来创建所需的文件夹和文件。cd ~/project
mkdir templates
cd templates
touch hello.html
templates/hello.html
文件并编写以下代码:<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
上述代码使用了 Jinja2 中的条件块。它会检查 name
变量是否为真值(非 None 或非空)。如果是,则显示内容 Hello {{ name }}!
。否则,显示内容 Hello, World!
。
cd ~/project
python3 rendering_templates.py
对于路由 /<name>
,你可以直接在 URL 栏中添加后缀。例如,下面是在 URL 栏中输入后缀 flask
并显示 Hello, flask! 的示例。
你可以尝试在 URL 栏中输入不同的 /<name>
路径,输出也会相应地改变。
在本实验中,我们学习了如何使用 render_template()
方法通过 Jinja2 模板引擎渲染模板。这种方法不仅能够生动地渲染模板,还支持自动转义,有助于防止潜在的 XSS 攻击。