12 模板渲染之模板变量的内容
在前一篇中,我们介绍了 Jinja2
模板的基本用法和语法,学习了如何通过 Flask
渲染模板。在这一篇中,我们将深入探讨如何在模板中使用变量,动态生成内容,并通过具体的案例来加深理解。
模板变量的基本概念
在 Jinja2
模板中,变量是通过使用双大括号 {{ }}
来表示的。当我们在 Flask 视图函数中渲染模板时,可以将一个或多个变量传递给模板,从而在页面上动态展示这些变量的值。
使用模板变量的示例
让我们来看一个简单的示例。假设我们要创建一个 Flask 应用,它能够显示用户的个人信息。
第一步:创建 Flask 应用
首先,创建一个新的 Flask 应用并定义路由:
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
模板文件:
<!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 视图传递过来的变量。当我们运行这个应用并访问根路径时,将会看到如下输出:
欢迎, Alice!
你的年龄是: 28 岁
爱好: painting
第三步:条件语句和循环
Jinja2
模板还支持控制结构,比如条件语句和循环,这为我们提供了更大的灵活性。
1. 条件语句
添加一个条件判断,来显示用户的不同信息:
<p>
{% if user.age >= 18 %}
你已成年。
{% else %}
你是未成年人。
{% endif %}
</p>
2. 循环
假设我们需要展示用户的多个爱好,我们可以将爱好存储在一个列表中,并通过循环进行渲染:
user_info = {
'name': 'Alice',
'age': 28,
'hobbies': ['painting', 'reading', 'gaming']
}
更新模板以使用循环:
<p>爱好:</p>
<ul>
{% for hobby in user.hobbies %}
<li>{{ hobby }}</li>
{% endfor %}
</ul>
最终的模板代码示例
将以上所有代码整合后,你的 index.html
文件应如下所示:
<!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 应用。