【问题标题】:jinja2 error 'list object' has no attribute 'items'jinja2 错误“列表对象”没有属性“项目”
【发布时间】:2021-11-09 05:26:15
【问题描述】:

编辑 找到解决方案后,我更改了标题以更好地反映问题。 Unstuckify 的回复仍然有效并且与问题的文本相关

我有一个字典列表,我想用 Jinja2 循环:

dict = [{'symbol': 'BTCUSDT', 'price': 59325.1234, 'Qty': 2501}, {'symbol': 'ETHUSDT', 'price': 55.12, 'Qty': 14}]

我使用了下面的循环(来自 here)。我希望外部“for”语句获取列表中的第一项(这将是一个字典),而内部“for”循环遍历字典中的 k,v。

{% for dict_item in dict %}
    {% for key, value in dict_item.items() %}
        <h1>Key: {{key}}</h1>
        <h2>Value: {{value}}</h2>
    {% endfor %}
{% endfor %}

但是,Jinja 给了我以下错误 - 这表明 Jinja 无法将列表中的元素识别为 dicts:

jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'

即使大大简化了,我仍然遇到同样的错误:

{% for symbol in dict %}
    <h2>{{ symbol }}</h2>
{% endfor %}

Jinja docs 在这方面不够详细。我也试过 this 并查看 this 方法但没有成功。只传递一个字典(不是字典列表)效果很好。

谁能解释我为什么会收到此错误并建议更好的代码?用不同的方法得到相同的错误信息让我认为我的想法有一些根本性的错误,但我想不通。

【问题讨论】:

    标签: iteration jinja2 nested-datalist


    【解决方案1】:

    你的代码在后端是什么样子的?

    我在 python 中有这个:

        @app.route('/test1')
        def test1():
            dict = [{'symbol': 'BTCUSDT', 'price': 59325.1234, 'Qty': 2501}, {'symbol': 'ETHUSDT', 'price': 55.12, 'Qty': 14}]
    
            return render_template('test1.html', dict=dict)
    

    这在我的 .html 文件中:

    <!doctype html>
    <title>Jinja Test</title>
    {% for dict_item in dict %}
        {% for key, value in dict_item.items() %}
            <h1>Key: {{ key }}</h1>
            <h2>Value: {{ value }}</h2>
        {% endfor %}        
    {% endfor %}
    

    我的渲染输出看起来像我期望的格式:

    键:符号
    价值:BTCUSDT
    关键:价格
    价值:59325.1234
    等等

    【讨论】:

    • @app.route 和你的完全一样——Ninja 例外点在“{% for key, value in dict_item.items() %}”行。我不认为我可以进一步简化测试代码。也许是环境问题——让我建立一个干净的环境。再试一次
    【解决方案2】:

    问题不在于代码,而在于环境 - 我更改了问题的标题以更好地反映问题。

    事实证明,Flask 安装很可能存在问题,因为重新安装(在很大程度上)解决了问题 - 上面的代码(在问题和答案中)按预期工作。

    此外,在调试过程中,我注意到我的环境中的 Jinja2 不喜欢 HTML () 中的注释文本,并且当它存在时,其行为方式是不确定的。相等的代码有时会抛出错误,有时不会,Jinja2 错误消息将指向注释掉的代码。

    Win10 Home 20H2 19042.1165 上的 Python 3.9.6、Flask 2.0.1、Jinja2 3.0.1、Chrome 93.0.4577.63、PyCharm 2021.1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多