如何在不迭代 Jinja2 模板的情况下引用字典值?



我试图在我的 Jinja2 模板中引用特定的字典值,但它似乎只允许我使用整数索引而不是命名键进行引用。

这是我的Flask/Python3.6代码:

data_dict = {"saved_selections": {}, "records": 0}
for row in cursor.fetchall():
data_dict["saved_selections"].update({"question" + row[1]: row[2]})

行中的数据为 3 列(已确认(。索引 1 是一个 ID 字段,索引 2 是我要存储的值。

在我的 html 模板中,我尝试过:

"data_dict"在函数中返回并存储在名为 "数据"在"render_template"函数中返回。

<option value="Not Reviewed" {% if data[0][0][2]=="Not Reviewed" %} selected="selected"{% endif %}>Not Reviewed</option>

和:

<option value="Not Reviewed" {% if data['saved_selections']['question1'][2]=="Not Reviewed" %} selected="selected"{% endif %}>Not Reviewed</option>

当我尝试命名密钥方式时,出现错误:

jinja2.exceptions.undefinedError: dict 对象没有元素 'saved_selections'

以下是我的查询中返回的一些示例数据(如果有用(:

LatestRound ReviewItemTaskID    ReviewItemValue
6           2                   Yes
6           3                   Yes
6           4   
6           5                   No - Provided Training
6           6                   No - Requested Update

我最终只是尝试返回一个字典,其中包含每行的值(在名为"saved_selections"的单个键下(,另一个名为"records"的键将存储返回的总行数,然后能够在我的模板中引用它们而无需使用 for 循环进行迭代。

编辑:认为添加我希望我的数据看起来像什么会很有帮助:

data_dict = {
"saved_selections": {
"question1": "Yes",
"question2": "Not Reviewed",
"question3": "No - Provided Training"
},
"records": 3
}

编辑 2:这是定义和返回数据的视图函数:

@app.route("/main", methods=["POST"])
def main_page():
data = (c.getReviewData(location=request.form['location'])
return render_template("main.html", data=data, location=location)

您的data_dict可能有问题。也许你在某处覆盖它,或者将错误的字典重新调整为 jinja。

首先这个

<option value="Not Reviewed" {% if data['saved_selections']=="banana" %} selected="selected"{% endif %}>Not Reviewed</option>

结合此render_template

return render_template('test.html', data={'saved_selections': 'banana'})

确保您的字典正确无误。

但是我们需要查看整个烧瓶路线才能在这里找到问题。

最新更新