11 Jinja2模板的内容

在Flask开发中,模板渲染是非常重要的一部分。上一篇我们讨论了“路由与视图之动态路由”,了解到如何通过动态路由来处理不同的URL请求,而本篇将深入探讨Flask中使用的Jinja2模板引擎。我们将学习如何生成模板并将其渲染到浏览器中。

什么是Jinja2?

Jinja2是一个现代的和设计友好的Python模板引擎,它用于将变量和控制结构渲染到HTML模板中。它能够帮助开发者将逻辑和视图分开,使得Web应用更易于维护和扩展。

基础项目结构

首先,我们需要设置一个基本的Flask项目结构。假设我们的项目结构如下:

1
2
3
4
my_flask_app/
├── app.py
└── templates/
└── hello.html

在这个项目中,app.py是我们的应用文件,而templates文件夹用来存放所有的HTML模板。

创建基本的Flask应用

app.py文件中,我们首先需要创建一个简单的Flask应用,并设置路由,以便在浏览器中访问它。代码如下:

1
2
3
4
5
6
7
8
9
10
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template('hello.html', name='World')

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

在这个示例中,我们创建了一个根路由/,并调用了render_template函数来渲染hello.html模板。

创建Jinja2模板

接下来,我们在templates文件夹中创建一个名为hello.html的文件。该文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello Jinja2</title>
</head>
<body>
<h1>Hello {{ name }}!</h1>
</body>
</html>

在这个模板中,我们使用了Jinja2的变量插值语法{{ name }},这里的name是从视图函数中传递过来的。

运行应用

在终端中运行以下命令,启动你的Flask应用:

1
python app.py

然后打开浏览器,访问http://127.0.0.1:5000/,你应该能够看到显示“Hello World!”的页面。

Jinja2的控制结构

Jinja2不仅支持简单的变量替换,它还提供了一系列控制结构,例如条件判断和循环。这使得我们能够更灵活地渲染模板内容。

条件语句

假设我们希望根据条件显示不同的消息。我们可以在hello.html中添加一个条件判断,如下所示:

1
2
3
4
5
6
7
8
<body>
<h1>Hello {{ name }}!</h1>
{% if name == 'World' %}
<p>Welcome to the Jinja2 tutorial!</p>
{% else %}
<p>Nice to see you, {{ name }}!</p>
{% endif %}
</body>

在这个示例中,我们使用了{% if ... %}语法来进行条件判断。

循环语句

Jinja2还支持循环,我们可以使用for语句来遍历一组数据。例如,假设我们有一个列表要渲染:

app.py中,我们可以修改索引函数如下:

1
2
3
4
@app.route('/')
def index():
items = ['Flask', 'Django', 'FastAPI']
return render_template('hello.html', name='World', items=items)

并在hello.html中添加循环:

1
2
3
4
5
6
7
8
<body>
<h1>Hello {{ name }}!</h1>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>

在浏览器中刷新页面后,你应该能够看到一个包含Flask、Django和FastAPI的列表。

总结

通过本篇教程,我们学习了如何在Flask中使用Jinja2模板引擎,生成动态的HTML内容。我们从简单的变量渲染开始,逐步引入了条件判断和循环等控制结构,使得我们的模板更加灵活和动态。

在下一篇“模板渲染之模板变量”中,我们将进一步探讨如何在模板中处理多个变量和复杂的数据结构,为我们的模板提供更多的内容和样式。希望大家能够在实际项目中灵活运用所学知识。

11 Jinja2模板的内容

https://zglg.work/flask-zero/11/

作者

AI免费学习网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论