Я пытаюсь сослаться на определенное значение словаря в моем шаблоне 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 - это поле идентификатора, а индекс 2 - это значение, которое я хочу сохранить.
В моем HTML-шаблоне я попытался:
«data_dict» возвращается в функциюи хранится в переменной с именем «data», которая возвращается в функции «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 нет элемента 'сохраненные_выборы'
Вот некоторые примеры данных, возвращаемых в моем запросе, если они полезны:
LatestRound ReviewItemTaskID ReviewItemValue
6 2 Yes
6 3 Yes
6 4
6 5 No - Provided Training
6 6 No - Requested Update
В конечном итоге я просто пытаюсь вернуть словарь, в котором есть значения каждой строки (под одним ключом с именем «selected_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)