2014-01-10 86 views
0

我的問題基本上是相同的代碼在django模板中不起作用,但它的作品'python'。結果字典中的鍵是字符串,值是'collections.Counter'類型。我正在使用Django 1.6.1。 下面的代碼代碼在模板中不起作用

for k,v in results.items(): 
    for a,b in v.items(): 
     print a,':',b 

模板:我越來越

{% for k,v in results.items %} 
    {% for a,b in v.items %} 
     {{ a }}, {{ b }} 
    {% endfor %} 
{% endfor %} 

錯誤是:

'int' object is not iterable 

,指着第二個for循環線。我該如何解決它?

樣品:

for k,v in results.items(): 
    print k,v 
    for a,b in v.items(): 
     print a,':',b 
OUTPUT: 
question1 Counter({u'1': 3, u'': 1, u'2': 1}) 
1 : 3 
: 1 
2 : 1 
question2 Counter({u'q': 3, u'': 1, u'w': 1}) 
q : 3 
: 1 
w : 1 
question3 Counter({u'a': 2, u'': 2, u's': 1}) 
a : 2 
: 2 
s : 1 
+1

可以顯示一個樣本輸入字典? (例如輸出第一個代碼片段?) – karthikr

+0

@karthikr added – bonobo

+0

它應該工作:嘗試'{%for a,b in v.iteritems%}' – karthikr

回答

1

我複製它在./manage.py shell

from django.template import Context, Template 
from collections import Counter 

t = Template('{% for k,v in results.items %}{% for a,b in v.items %}[{{ a }}, {{ b }}]{% endfor %}{% endfor %}') 
c = Context({"results": {"question1": Counter({'1': 3, '': 1, '2': 1})}}) 
t.render(c) 

當然,我得到了同樣的錯誤。這是因爲for關鍵字中的items不是對dict.items的簡單調用,也不支持Counter

嘗試轉換您的Counterdict當您創建Context

from django.template import Context, Template 
from collections import Counter 

t = Template('{% for k,v in results.items %}{% for a,b in v.items %}[{{ a }}, {{ b }}]{% endfor %}{% endfor %}') 
c = Context({"results": {"question1": dict(Counter({'1': 3, '': 1, '2': 1}))}}) 
t.render(c) 

您將獲得:

u'[1, 3][, 1][2, 1]'