13 Jinja2 模板在 Flask 中的使用

13 Jinja2 模板在 Flask 中的使用

在 Flask 中,Jinja2 是默认的模板引擎,用于渲染动态内容。使用 Jinja2,你可以将 Python 代码与 HTML 代码分离,提高代码的组织性和可维护性。

基本概念

Jinja2 允许在 HTML 文件中嵌入 Python 代码。它提供了很多强大的功能,比如模板继承、变量替换、条件语句和循环等。

创建 Flask 应用

首先,我们创建一个简单的 Flask 应用并组织项目结构。

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

app.py

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

app = Flask(__name__)

@app.route('/')
def index():
user = {"username": "小明"}
return render_template('index.html', user=user)

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

index.html

templates/index.html 文件中,我们可以使用 Jinja2 语法来渲染数据。

1
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8">
<title>欢迎页面</title>
</head>
<body>
<h1>欢迎, {{ user.username }}!</h1>
<p>这是一个使用 Jinja2 模板的示例。</p>
</body>
</html>

在上面的代码中,{{ user.username }}Jinja2 的变量替换语法,user 是我们在 app.py 中传递给模板的上下文数据。

模板继承

Jinja2 支持模板继承,这使得我们可以创建基础模板,并在此基础上扩展其他模板。

基础模板

创建一个基础模板 base.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8">
<title>{% block title %}首页{% endblock %}</title>
</head>
<body>
<header>
<h1>我的网站</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>版权所有 &copy; 2023</p>
</footer>
</body>
</html>

继承基础模板的页面

然后修改 index.html 以继承 base.html

1
2
3
4
5
6
7
8
{% extends "base.html" %}

{% block title %}欢迎{% endblock %}

{% block content %}
<h1>欢迎, {{ user.username }}!</h1>
<p>这是一个使用 Jinja2 模板的示例。</p>
{% endblock %}

在这里,{% extends "base.html" %} 表示当前模板继承自基础模板。{% block %}` 和 `{% endblock %} 用于定义可以被重写的区域。

条件语句与循环

Jinja2 还支持条件语句和循环,这是处理数据展示时非常实用的功能。

条件语句示例

假设我们想根据用户的登录状态显示不同的信息:

1
2
3
4
@app.route('/')
def index():
user = {"username": "小明", "is_logged_in": True}
return render_template('index.html', user=user)

index.html 中使用条件语句:

1
2
3
4
5
{% if user.is_logged_in %}
<h1>欢迎, {{ user.username }}!</h1>
{% else %}
<h1>欢迎, 访客!</h1>
{% endif %}

循环示例

如果我们想显示一组用户的列表,可以使用循环:

1
2
3
4
@app.route('/users')
def users():
user_list = [{"username": "小明"}, {"username": "小红"}, {"username": "小蓝"}]
return render_template('users.html', users=user_list)

users.html 中渲染用户列表:

1
2
3
4
5
6
<h1>用户列表</h1>
<ul>
{% for user in users %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>

结论

通过使用 Jinja2 模板引擎,Flask 应用的动态内容渲染变得简洁而高效。我们可以轻松实现数据的展示、条件的判断以及循环的迭代。

掌握这部分内容是使用 Flask 和 Jinja2 开发 Web 应用的重要一步,建议多加练习以巩固理解。

13 Jinja2 模板在 Flask 中的使用

https://zglg.work/flask/13/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议