Как ссылаться на значение словаря без итерации в шаблоне Jinja2? - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь сослаться на определенное значение словаря в моем шаблоне 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)

1 Ответ

0 голосов
/ 15 сентября 2018

Вероятно, что-то не так с вашим data_dict. Возможно, вы перезаписали это где-нибудь или переназначили неверную информацию для дзиндзя.

Сначала это

<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'})

Чтобы убедиться, что ваш диктат правильный.

Но нам нужно увидеть весь маршрут колбы, чтобы найти проблему здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...