将变量传递给Flask的render_template

问题描述 投票:0回答:4

我想将多个变量从 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)
python flask jinja2
4个回答
95
投票

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())

25
投票
return render_template('im.html', user= None, content = xxx, timestamp = xxx)

您可以根据需要传递任意数量的变量。 api

摘录:

flask.render_template(模板名称或列表,**上下文) 呈现一个 具有给定上下文的模板文件夹中的模板。

参数: template_name_or_list – 模板名称 呈现的,或具有模板名称的可迭代对象第一个现有的 将渲染上下文 - 应该可用的变量 模板的上下文。


13
投票

还可以将列表传递给

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>
...

0
投票

要将变量传递给 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>
© www.soinside.com 2019 - 2024. All rights reserved.