在前一篇中,我们介绍了 Jinja2
模板的基本用法和语法,学习了如何通过 Flask
渲染模板。在这一篇中,我们将深入探讨如何在模板中使用变量,动态生成内容,并通过具体的案例来加深理解。
模板变量的基本概念
在 Jinja2
模板中,变量是通过使用双大括号 {{ }}
来表示的。当我们在 Flask 视图函数中渲染模板时,可以将一个或多个变量传递给模板,从而在页面上动态展示这些变量的值。
使用模板变量的示例
让我们来看一个简单的示例。假设我们要创建一个 Flask 应用,它能够显示用户的个人信息。
第一步:创建 Flask 应用
首先,创建一个新的 Flask 应用并定义路由:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from flask import Flask, render_template
app = Flask(__name__)
@app.route('/') def home(): user_info = { 'name': 'Alice', 'age': 28, 'hobby': 'painting' } return render_template('index.html', user=user_info)
if __name__ == '__main__': app.run(debug=True)
|
在上面的代码中,我们定义了一个字典 user_info
,其中包含用户的名字、年龄和爱好。然后我们通过 render_template
函数将这个字典传递给模板 index.html
。
第二步:创建模板
接下来,我们需要在 templates
文件夹中创建 index.html
模板文件:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <!DOCTYPE html> <html lang="zh-Hans"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>用户信息</title> </head> <body> <h1>欢迎, {{ user.name }}!</h1> <p>你的年龄是: {{ user.age }} 岁</p> <p>爱好: {{ user.hobby }}</p> </body> </html>
|
在 index.html
中,我们使用 {{ user.name }}
、{{ user.age }}
和 {{ user.hobby }}
来显示从 Flask 视图传递过来的变量。当我们运行这个应用并访问根路径时,将会看到如下输出:
1 2 3
| 欢迎, Alice! 你的年龄是: 28 岁 爱好: painting
|
第三步:条件语句和循环
Jinja2
模板还支持控制结构,比如条件语句和循环,这为我们提供了更大的灵活性。
1. 条件语句
添加一个条件判断,来显示用户的不同信息:
1 2 3 4 5 6 7
| <p> {% if user.age >= 18 %} 你已成年。 {% else %} 你是未成年人。 {% endif %} </p>
|
2. 循环
假设我们需要展示用户的多个爱好,我们可以将爱好存储在一个列表中,并通过循环进行渲染:
1 2 3 4 5
| user_info = { 'name': 'Alice', 'age': 28, 'hobbies': ['painting', 'reading', 'gaming'] }
|
更新模板以使用循环:
1 2 3 4 5 6
| <p>爱好:</p> <ul> {% for hobby in user.hobbies %} <li>{{ hobby }}</li> {% endfor %} </ul>
|
最终的模板代码示例
将以上所有代码整合后,你的 index.html
文件应如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <!DOCTYPE html> <html lang="zh-Hans"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>用户信息</title> </head> <body> <h1>欢迎, {{ user.name }}!</h1> <p>你的年龄是: {{ user.age }} 岁</p> <p> {% if user.age >= 18 %} 你已成年。 {% else %} 你是未成年人。 {% endif %} </p> <p>爱好:</p> <ul> {% for hobby in user.hobbies %} <li>{{ hobby }}</li> {% endfor %} </ul> </body> </html>
|
总结
在本篇文章中,我们探讨了如何在 Flask
应用中使用 Jinja2
模板变量,动态渲染内容。我们学习了如何将数据从视图函数传递到模板,并展示这些数据。我们还介绍了条件语句和循环,使模板渲染更加灵活。
下一篇文章中,我们将讨论 Jinja2
的模板继承功能,它将帮助我们更好地管理和复用我们的模板代码。通过模板变量的灵活使用和模板继承的搭配,您将能够创建出更加动态、优雅的 Flask 应用。