我的问题基本上是相同的代码在django模板中不起作用,但它的工作原理是'python'。结果dict中的键是字符串,值是'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
答案 0 :(得分: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)
当然我也得到了同样的错误。这是因为items
关键字中的for
不是对dict.items
的简单调用,也不支持Counter
。
创建Counter
时尝试转换dict
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]'