2014-05-15 129 views
1

我得到了Jinja2的一些不尋常的行爲,並迭代了一個我無法完全放下手指的數組。我將一本字典傳入Jinja2,其中一個字典的值是一個數組。這是一個簡單的例子,可以。Jinja2陣列迭代問題

mydict = { 
    'testvar1': 'this is a test var 1', 
    'testvar2': 'this is a test var 2', 
    'testvar3': ['test','test','test','test','test'], 
    } 

這是我的神社模板

{{ testvar1 }} 
{{ testvar2 }} 
{% for var in testvar3 %} 
    {{ var }} 
{% endfor %} 

現在這種實際工作,我得到下面的輸出

this is a testvar1 
this is a testvar2 
test 
test 
test 
test 
test 
test 

不過,我產生使用CSV導入實用程序的字典。現在我知道這個工具將所有的值作爲字符串導入,所以我用短劃線分隔'數組字段',以便稍後可以將它們分開。

input_file = csv.DictReader(open("./my_path/import.csv")) 
for row in input_file: 
    for key, value in row.iteritems(): 
     if '-' in value: 
      value = value.split('-') 

當我打印手動創建的字典中的數組值和由csv導入創建的字典時,它們看起來完全相同。

['test','test','test','test','test'] 

但是,當我使用由csv import填充的dictonary生成配置時,我得到的輸出是完全不同的。

testvar1 
testvar2 
t 
e 
s 
t 
t 
e 
s 
t 

,...等

現在看來,它遍歷值,就像是份簡單的字符串值,在時間循環的每個迭代打印一個字符。

但是,當手動製作詞典時,它可以很好地工作。

任何想法?如果有更乾淨的方式來做到這一點,我就會全神貫注。

在此先感謝。

+0

可能不重要,但爲什麼前兩個字符串打印在你的兩個例子中不同?第一個例子說「這是一個testvar1」,但第二個只是說「testvar1」。不要試圖挑剔,只是想了解這個輸出是如何產生的。 – Nacho

+0

請顯示更多的Python代碼。比如你如何將你的變量傳遞給渲染函數。 –

+0

你並不孤單!我有完全一樣的問題。 –

回答

0

我的問題是我的數據庫中有錯誤的JSON語法。

{ 
    "tags" : "[my, wrong, array]" 
} 

最終解釋爲python的unicode對象,這解釋了爲什麼迭代它遍歷每個字符。 正確的語法是:

{ 
    "tags": [ 
     "tech", 
     "python", 
     "flask" 
    ] 
}