2015-01-11 108 views
0

我目前正在使用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) 

(使用這四個僅作爲示例)

在我的模板,我遍歷,這四個引腳,想顯示我的DB信息(例如描述,狀態和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 }}來顯示當前值。

任何人都可以闡明我的錯誤是什麼?

回答

1

問題是你已經做了一個字典,而不是一個列表。當您通過for pin in pins迭代字典時,您正在遍歷,而不是值 - 因此在每次迭代中,您將得到3,5,7等中的一個。這些值顯然沒有像description這樣的屬性。

相反,使用values()方法:

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

或者你可能只是使用擺在首位的列表考慮。

+0

這樣做 - 非常感謝! –

+0

你也可以做''pins = Pin.select()。其中​​(Pin.id << [3,5,7,8])''得到具有給定ID的引腳列表。 – coleifer