【问题标题】:jinja2.exceptions.UndefinedError when iteratiing a nested dictionary in html flask在 html 烧瓶中迭代嵌套字典时 jinja2.exceptions.UndefinedError
【发布时间】:2020-02-21 12:05:07
【问题描述】:

我有以下字典。

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 页面中迭代这个嵌套字典。这个字典是通过flask python中的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 %}

当我在 chrome 中运行 URL 时出现此错误。

jinja2.exceptions.UndefinedError UndefinedError: 'int object' 没有属性 'items'

我该如何解决这个问题?

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    添加一个 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 %}
    

    【讨论】:

      【解决方案2】:

      您的嵌套 for 循环假定每个二级条目也是一个 dict,但事实并非如此,它在第一项上中断:

      {% 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 不是字典,您需要添加条件逻辑来定义您想要做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 2020-12-26
        相关资源
        最近更新 更多