前言:
Flask 使用 Jinja2 作为其默认模板引擎,这意味着您可以直接在 Flask 应用程序中使用 Jinja2 模板。您可以创建模板文件,然后在视图函数中渲染这些模板,将动态数据传递给模板进行渲染,并最终生成最终的 HTML 页面。
一、传递变量到Jinja2
app.py
from flask import Flask,render_template
app = Flask(__name__)
class User:
def __init__(self,username,email):
self.username = username
self.email = email
@app.route('/')
def index():
hobby = "游戏"
person = {
"name": "张三",
"age": 181
}
user = User("李四", "xx@qq.com")
return render_template("index.html", hobby=hobby, person=person, user=user)
if __name__ == '__main__':
app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量使用</title>
</head>
<body>
<h1>我的兴趣爱好是:{{ hobby }}</h1>
<p>person的姓名是:{{ person.name }},person的年龄是:{{ person.age }}</p>
<p>user的用户名是:{{ user.name }},user的邮箱是:{{ user.email }}</p>
</body>
</html>
运行项目效果
PS:字典健和对象的属性也可以通过中括号的方式来获取,如下面这样获取
{{ user.name }}
{{ user['name'}}
二、使用关键字参数方式传递
以上案例中,传递了3个变量到模版中,在变量较多的情况下,首先可以把所有的变量放到字典中,然后再给render_template传递参数时使用**语法,将字典变成关键字参数,以上的视图函数可以修改为下面的形式:
from flask import Flask, render_template
app = Flask(__name__)
class User:
def __init__(self, username, email):
self.username = username
self.email = email
@app.route('/')
def index():
hobby = "游戏"
person = {
"name": "张三",
"age": 18
}
user = User("李四", "xx@qq.com")
context = {
"hobby": hobby,
"person": person,
"user": user
}
return render_template("index.html", **context)
if __name__ == '__main__':
app.run(debug=True)
最后执行效果其实是一样的