0

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

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

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

我使用了下面的循环(从这里)。我希望外部“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文档对此不够详细。我也尝试过这个方法,没有成功。只传递一个字典(不是字典列表)效果很好。

任何人都可以解释为什么我会收到此错误并建议更好的代码吗?用不同的方法得到相同的错误信息让我认为我的想法存在一些基本错误,但我无法弄清楚。

4

2 回答 2

0

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

我在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

于 2021-09-14T04:41:58.713 回答
0

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

事实证明,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

于 2021-09-14T22:16:06.490 回答