jinja2 错误 'list object' 没有属性 'items'
jinja2 error 'list object' has no attribute 'items'
编辑 找到解决方案后,我更改了标题以更好地反映问题。 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 无法将列表中的元素识别为字典:
jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'
即使非常简化,我仍然会收到同样的错误:
{% for symbol in dict %}
<h2>{{ symbol }}</h2>
{% endfor %}
Jinja docs aren't detailed enough on this. I've also tried and looked at 方法没有成功。只传递一个字典(而不是一个字典列表)效果很好。
任何人都可以解释为什么我会收到此错误并建议更好的代码吗?用不同的方法得到相同的错误信息让我认为我的想法有一些根本性的错误,但我想不通。
您的代码在后端是什么样子的?
我在 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
等等
问题不在于代码,而在于环境 - 我更改了问题的标题以更好地反映问题。
事实证明,Flask 安装很可能存在问题,因为 re-install(很大程度上)解决了该问题 - 上面的代码(在问题和答案中)按预期工作。
此外,在调试过程中,我注意到我环境中的 Jinja2 不喜欢 HTML () 中的注释文本,并且在存在时以 non-deterministic 方式运行。相同的代码有时会抛出错误,有时不会,Jinja2 错误消息将指向注释掉的代码。
Python 3.9.6,Flask 2.0.1,Jinja2 3.0.1,Chrome 93.0.4577.63,PyCharm 2021.1 on Win10 Home 20H2 19042.1165
编辑 找到解决方案后,我更改了标题以更好地反映问题。 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 无法将列表中的元素识别为字典:
jinja2.exceptions.UndefinedError: 'list object' has no attribute 'items'
即使非常简化,我仍然会收到同样的错误:
{% for symbol in dict %}
<h2>{{ symbol }}</h2>
{% endfor %}
Jinja docs aren't detailed enough on this. I've also tried
任何人都可以解释为什么我会收到此错误并建议更好的代码吗?用不同的方法得到相同的错误信息让我认为我的想法有一些根本性的错误,但我想不通。
您的代码在后端是什么样子的?
我在 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
等等
问题不在于代码,而在于环境 - 我更改了问题的标题以更好地反映问题。
事实证明,Flask 安装很可能存在问题,因为 re-install(很大程度上)解决了该问题 - 上面的代码(在问题和答案中)按预期工作。
此外,在调试过程中,我注意到我环境中的 Jinja2 不喜欢 HTML () 中的注释文本,并且在存在时以 non-deterministic 方式运行。相同的代码有时会抛出错误,有时不会,Jinja2 错误消息将指向注释掉的代码。
Python 3.9.6,Flask 2.0.1,Jinja2 3.0.1,Chrome 93.0.4577.63,PyCharm 2021.1 on Win10 Home 20H2 19042.1165