我想将多个变量从 Flask 视图传递到 Jinja 模板。目前,我只能通过一项。渲染模板时如何传递多个变量?
@app.route("/user/<user_id>/post/<post_id>", methods=["GET", "POST"])
def im_research(user_id, post_id):
user = mongo.db.Users.find_one_or_404({'ticker': user_id})
return render_template('post.html', user=user)
render_template
函数接受任意数量的关键字参数。查询模板中您需要的每个内容,然后将每个查询的结果作为另一个参数传递给render_template
。
@app.route("/user/<user_id>/post/<post_id>")
def im_research(user_id, post_id):
user = get_user_by_id(id)
post = get_user_post_by_id(user, id)
return render_template("post.html", user=user, post=post)
Python 还有一个内置的
locals()
函数,它将返回所有本地定义变量的字典。 不建议这样做,因为它可能传递太多内容并掩盖具体传递的内容。
@app.route("/user/<user_id>/post/<post_id>")
def im_research(user_id, post_id):
user = get_user_by_id(id)
post = get_user_post_by_id(user, id)
return render_template("post.html", **locals())
return render_template('im.html', user= None, content = xxx, timestamp = xxx)
您可以根据需要传递任意数量的变量。 api
摘录:
flask.render_template(模板名称或列表,**上下文) 呈现一个 具有给定上下文的模板文件夹中的模板。
参数: template_name_or_list – 模板名称 呈现的,或具有模板名称的可迭代对象第一个现有的 将渲染上下文 - 应该可用的变量 模板的上下文。
还可以将列表传递给
render_template
的上下文变量,并在 HTML 中使用 Jinja 的语法引用其元素。
示例.py
mylist = [user, content, timestamp]
return render_template('exemple.html', mylist=mylist)
示例.html
...
<body>
{% for e in mylist %}
{{e}}
{% endfor %}
</body>
...
要将变量传递给 Flask 的 render_template 函数,您可以创建一个包含要传递的变量的字典,然后将该字典作为关键字参数提供给 render_template。 具体方法如下:
context = {
'name': 'test',
'age': '35'
}
render_template("index.html", **context)
在模板中,可以直接访问变量:
<h1>Hello, {{ name }}!</h1>
<p>You are {{ age }} years old.</p>