【问题标题】:Access to a dict's values访问字典的值
【发布时间】:2015-03-09 06:10:37
【问题描述】:

我目前正在使用 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 }},它会打印 正确的描述。

根据我对文档和链接问题的理解,应该可以在循环内使用{{ pin.description }} 来显示当前值。

谁能解释我的错误是什么?

【问题讨论】:

    标签: python dictionary flask jinja2


    【解决方案1】:

    问题是您制作了字典,而不是列表。当您通过 for pin in pins 遍历字典时,您是在遍历 keys,而不是值 - 所以在每次迭代中,您会得到 3、5、7 等之一。这些值显然不会具有description 之类的属性。

    改为使用values() 方法:

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

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

    【讨论】:

    • 您也可以通过pins = Pin.select().where(Pin.id &lt;&lt; [3, 5, 7, 8]) 获取具有给定 ID 的引脚列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    相关资源
    最近更新 更多