Flask 使用 Jinja2 模板渲染页面的方法

江岸
江岸
发布时间:2026-10-11| 2人浏览过
原创

本文介绍如何在 Flask 中使用 Jinja2 模板引擎渲染 HTML 页面。通过创建 templates 目录存放 HTML 文件,利用 render_template 函数将视图与模板分离,实现数据交互与页面展示。文章包含从基础 Hello World 到模板引用的完整代码示例及启动验证步骤,帮助开发者掌握 Flask 页面渲染的核心方法。

Flask 模板渲染基础

Flask 是一个轻量级的 Python Web 框架,原生支持使用页面模板(Template)来构建动态网页。通过模板,开发者可以将 Python 逻辑与 HTML 结构分离,并通过参数传递实现数据交互。在开始之前,请确保已安装 Flask 环境。

环境准备与版本确认

首先,通过命令行确认 Flask 的安装路径及当前版本,确保开发环境就绪。

liumiaocn:flask liumiao$ which flask
/usr/local/bin/flask
liumiaocn:flask liumiao$ flask --version
Flask 1.0.2
Python 2.7.10 (default, Jul 15 2017, 17:16:57) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
liumiaocn:flask liumiao$

基础示例:直接返回 HTML 字符串

在 Flask 中,最简单的页面展示方式是直接在视图函数中返回 HTML 字符串。虽然这种方式简单直观,但在页面结构复杂时,代码可读性较差,不利于维护。

1. 编写基础代码

创建一个名为 flask_1.py 的文件,内容如下:

#!/usr/bin/python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
  return "<h1>Hello World!</h1>"
if __name__ == "__main__":
  app.debug=True
  app.run(host='0.0.0.0',port=7000)
liumiaocn:flask liumiao$

2. 设置执行权限并启动服务

为脚本添加可执行权限(如 755),然后直接运行该文件启动微服务进程:

liumiaocn:flask liumiao$ chmod 755 flask_1.py 
liumiaocn:flask liumiao$ ./flask_1.py 
 * Serving Flask app "flask_1" (lazy loading)
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:7000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 131-533-062

3. 验证执行结果

启动成功后,可以通过 curl 命令或浏览器访问 http://localhost:7000 来确认页面显示。使用 curl 可以查看原始的 HTML 源码:

liumiaocn:flask liumiao$ curl http://localhost:7000
<h1>Hello World!</h1>liumiaocn:flask liumiao$

进阶示例:使用 Jinja2 模板引擎

为了解决嵌入式 HTML 代码查看不便的问题,Flask 提供了基于 Jinja2 的模板渲染功能。通过将 HTML 文件独立存放,并使用 render_template 模块进行关联,可以实现更清晰的代码结构。

1. 创建模板目录与 HTML 文件

Flask 默认在 templates 目录下搜索模板文件。因此,需要在项目根目录创建 templates 文件夹,并在其中创建 index.html 文件:

liumiaocn:flask liumiao$ ls templates/
index.html
liumiaocn:flask liumiao$ cat templates/index.html 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello Template</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>
liumiaocn:flask liumiao$

2. 修改 Python 代码以引用模板

在 Python 代码中,需要引入 render_template 模块,并在视图函数中调用它来关联 URL 与模板文件。创建 flask_2.py:

#!/usr/bin/python
from flask import Flask
from flask import render_template
app = Flask(__name__)
@app.route("/")
def hello():
  return render_template("index.html")
if __name__ == "__main__":
  app.debug=True
  app.run(host='0.0.0.0',port=7000)
liumiaocn:flask liumiao$

3. 启动服务并验证

运行 flask_2.py 启动服务,并通过 curl 或浏览器访问,确认页面渲染结果:

liumiaocn:flask liumiao$ python flask_2.py 
 * Serving Flask app "flask_2" (lazy loading)
 * Environment: production
  WARNING: Do not use the development server in a production environment.
  Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:7000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 131-533-062
liumiaocn:~ liumiao$ curl http://localhost:7000
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Hello Template</title>
</head>
<body>
  <h1>Hello World!</h1>
</body>
</html>liumiaocn:~ liumiao$

总结

通过上述步骤,我们完成了从基础 HTML 字符串返回到使用 Jinja2 模板引擎渲染页面的转换。使用 render_template 不仅使代码结构更加清晰,也为后续添加动态数据交互奠定了基础。以上就是 Flask 使用 Jinja2 模板渲染页面的详细内容,更多关于 Flask 模板开发、Python Web 框架及 Jinja2 语法技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。