我目前正在使用Pythons Flask构建小型经理(学习python),它使用Jinja2模板引擎。我使用Peewee与我的数据库交谈。
我有一个引脚字典,它们都包含给定引脚的信息。引脚上的信息直接来自Peewee,如下:
pins = {}
pins[3] = Pin.get(Pin.id == 3)
pins[5] = Pin.get(Pin.id == 5)
pins[7] = Pin.get(Pin.id == 7)
pins[8] = Pin.get(Pin.id == 8)
(仅以这四个为例)
在我的模板中,我遍历这四个引脚,并希望显示我的数据库信息(例如说明,状态和ID),所以我写了这段代码:
{% for pin in pins %}
{% if pin.state %}
<input type="checkbox" checked="checked" data-toggle="toggle" data-pin="{{ pin.id }}">
{% else %}
<input type="checkbox" data-toggle="toggle" data-pin="{{ pin.id }}" ?>
{% endif %}
{{ pin.description }}
<br>
{% endfor %}
根据jinja2 website和this question代码应该有效,因为我在循环内访问pin.state,pin.id和pin.description。
但它没有 - 无论我试图展示哪个属性,在使用{{ pin.description }}
访问该属性时它都没有给我任何帮助。我注意到以下内容,可能会提供一些帮助
{{ pin }}
,则会打印当前的密钥
字典。{{ pins[pin].description }}
,则会打印出来
正确的描述。 根据我对文档和链接问题的理解,应该可以在循环中使用{{ pin.description }}
来显示当前值。
任何人都可以了解我的错误是什么吗?
答案 0 :(得分:1)
问题是你制作了一本字典,而不是一份清单。当您通过for pin in pins
遍历字典时,您正在遍历键,而不是值 - 所以在每次迭代中,您将得到3,5,7之一等等。这些值显然不是没有像description
这样的属性。
相反,请使用values()
方法:
{% for pin in pins.values() %}
或者您可能会考虑首先使用列表。