访问dict的值

时间:2015-01-11 09:40:51

标签: python dictionary flask jinja2

我目前正在使用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 websitethis question代码应该有效,因为我在循环内访问pin.state,pin.id和pin.description。

但它没有 - 无论我试图展示哪个属性,在使用{{ pin.description }}访问该属性时它都没有给我任何帮助。我注意到以下内容,可能会提供一些帮助

  1. 如果我在循环中创建{{ pin }},则会打印当前的密钥 字典。
  2. 如果我在循环中创建{{ pins[pin].description }},则会打印出来 正确的描述。
  3. 根据我对文档和链接问题的理解,应该可以在循环中使用{{ pin.description }}来显示当前值。

    任何人都可以了解我的错误是什么吗?

1 个答案:

答案 0 :(得分:1)

问题是你制作了一本字典,而不是一份清单。当您通过for pin in pins遍历字典时,您正在遍历,而不是值 - 所以在每次迭代中,您将得到3,5,7之一等等。这些值显然不是没有像description这样的属性。

相反,请使用values()方法:

{% for pin in pins.values() %}

或者您可能会考虑首先使用列表。