代码在模板中不起作用

时间:2014-01-10 16:19:16

标签: python django

我的问题基本上是相同的代码在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

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]'