У меня есть следующий словарь.

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»

Как я могу решить эту проблему?

1
Kaverappa KU 25 Окт 2019 в 09:35

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 %}
0
Shivendra Pratap Kushwaha 25 Окт 2019 в 08:56

Ваши вложенные циклы 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 не является диктатом.

1
seymourgoestohollywood 25 Окт 2019 в 06:54
58553392