У меня есть следующий словарь.
parent_dict= {
"AAA": 19,
"BBB": 74861149,
"CCC": "84%",
"ABC": {
"Types": {
"A1": 25
}
},
"DEF": {
"Average": 279,
"Types": {
"B1": 12,
"B2": 1500,
"B3": 9000
},
"Total": 46248438
}
}
Я хочу повторить этот вложенный словарь в HTML-странице. Этот словарь отправляется через render_template
в флеш-питоне.
Я использовал python и flask, чтобы создать конечную точку и отправить ее на мою HTML-страницу.
app.py
@app.route('/sendData',methods=['GET','POST'])
def sendData():
return render_template('demo.html', parent_dict=parent_dict)
demo.html
{% for key,parent_dict_item in parent_dict.items() %}
{% for key2, nested_value in parent_dict_item.items() %}
<p>{{ parent_dict_item }}</p>
{% endfor %}
{% endfor %}
Я получаю эту ошибку при запуске URL-адреса в Chrome.
jinja2.exceptions.UndefinedError UndefinedError: «объект int» не имеет атрибута «items»
Как я могу решить эту проблему?
2 ответа
Добавьте условие if для проверки типа parent_dict_item. Вложенный цикл будет работать только в том случае, если parent_dict_item имеет тип dict:
{% for key,parent_dict_item in parent_dict.items() %}
{% if type(parent_dict_item).__name__ == 'dict' %}
{% for key2, nested_value in parent_dict_item.items() %}
<p>{{ parent_dict_item }}</p>
{% endfor %}
{% endif %}
{% endfor %}
Ваши вложенные циклы for предполагают, что каждая запись второго уровня также является диктом, но это не тот случай, он разбивается на первый элемент:
{% for key,parent_dict_item in parent_dict.items() %}
# key = "AAA", parent_dict_item = 19
{% for key2, nested_value in parent_dict_item.items() %}
# This breaks, because parent_dict_item is 19 (an int) so you can't call int.items().
<p>{{ parent_dict_item }}</p>
{% endfor %}
{% endfor %}
Вам нужно будет добавить условную логику, которая определяет, что вы хотите сделать, если parent_dict_item не является диктатом.
Похожие вопросы
Новые вопросы
python
Python - это мультипарадигмальный динамически типизированный многоцелевой язык программирования, разработанный для быстрого (для изучения, использования и понимания) и для обеспечения чистого и унифицированного синтаксиса. Обычно используются две похожие, но несовместимые версии Python, Python 2.7 и 3.x. Для специфичных для версии вопросов Python добавьте тег [python-2.7] или [python-3.x]. При использовании варианта или библиотеки Python (например, Jython, PyPy, Pandas, Numpy), пожалуйста, включите их в теги.