【问题标题】:Code stopped working. Gives me a `jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'` error代码停止工作。给我一个 `jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'` 错误
【发布时间】:2021-02-12 00:43:05
【问题描述】:

我正在为我的网络应用程序使用 spotify 的 API。我创建了一个搜索栏,根据 spotify 的要求询问查询和查询的类型(例如曲目、专辑、艺术家)。搜索专辑的代码工作得很好,直到几个小时前它停止并开始给我以下错误jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items',仔细查看终端指出问题出在以下行{% for k, v in value.items() %} 它应该请注意,我没有更改代码中的任何内容,正如我提到的那样它工作得很好,我继续返回到 spotify 的控制台以检查我收到的数据以及我的代码中是否存在逻辑错误,但我可以' t 似乎找到一个。 实际上我在寻找艺术家时遇到了同样的问题。但这是另一个问题。现在,问题是我搜索专辑。

为了更好地了解收到的数据,您可以查看 spotify 的搜索控制台:https://developer.spotify.com/console/get-search-item/

我们将不胜感激。谢谢。

        <section class="wrapper">
            <div class="search-res">
                <h1 class="header">{{query}}</h1>
                <div class="row">
                    <div class="records" id="tracks">
                        {% set info = [] %}

                        {% if q_type == "album" %}
                            {% for record in results['albums']['items'] %}
                                {% for key, value in record.items() %}
                                    {% if key == "artists" %}
                                        {% for k, v in value.items() %}
                                            {% if k == "name" %}
                                                {{info.append(v) or ""}}
                                            {% endif %}
                                        {% endfor %}
                                    {% endif %}

                                    {% if key == "name" %}
                                        {{info.append(value)}}
                                    {% endif %}

                                    {% if key == "id" %}
                                        {{info.append(value)}}
                                    {% endif %}

                                    {% if key == "external_urls" %}
                                        {% for k, v in value.items() %}
                                            {% if k == "spotify" %}
                                                {{info.append(v) or ""}}
                                            {% endif %}
                                        {% endfor %}
                                    {% endif %}

                                    {% if key == "images" %}
                                        {% for k, v in value[1].items() %}
                                            {% if k == "url" %}
                                                {{info.append(v) or ""}}
                                            {% endif %}
                                        {% endfor %}
                                    {% endif %}
                                {% endfor %}
                            {% endfor %}
                            {{info}}
                        {% endif %}
                    </div>
                </div>
            </div>
        </section>

【问题讨论】:

  • 你确定这是 Python 吗?
  • 这是在搜索路径中呈现的模板的一部分。该网络应用程序是用 python 编写的,是的。我使用烧瓶作为我的框架。我添加了 python 和 flask 作为标签,因为我认为它们是相关信息。我可以看到他们如何被视为相反。
  • 你有解决这个问题的办法吗?

标签: python json flask jinja2


【解决方案1】:

字典有一个函数items()。如果你有这样的字典{'a': 'A', 'b': 'B'},dic.items() 会给你一个元组列表[('a', 'A'), ('b', 'B')]

这个函数帮助我们用键和值来迭代字典。

您的错误是'list object' has no attribute 'items'。这表明value 是一个列表,而不是字典。由于您正在为列表调用字典函数 (items()),因此会出现此错误。

您必须逐行调试才能更好地理解。 删除此行之后的所有内容。

{% for k, v in value.items() %}

只需打印value 即可检查数据类型。我希望这将是一个清单。只需在下面添加此行并检查输出。

{{ value }}

但是由于您直接从他们的网站复制了此代码,因此代码中应该没有任何错误。无论如何,只需按照上述说明检查数据结构即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2017-10-21
    • 2022-11-18
    • 1970-01-01
    • 2022-01-10
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多