我有一个名为categories
的字典。我只想在Django模板中两次遍历这个字典。以下是我的代码:
<div class="first">
{% for category in categories %}
<li class="{{category.name}}"><a href="#{{category.name}}">{{category.name}</a></li>
{% endfor %}
</div>
<div class="lenDict">
<h2>{{categories|length}}</h2>
</div>
<div class="second">
{% for category in categories %}
{% for facet in allFacets %}
{% if category.name == facet.category %}
<p id="{{facet.id}}">{{facet.facet}}</p>
{% endif %}
{% endfor %}
{% endfor %}
</div>
当我这样做时,div first
下的第一个循环正常工作。
但是当谈到div second
下的第二个循环时,它没有给出任何结果。
此外,div lenDict
下的代码也没有结果。
Django模板是否有任何限制我们不能两次迭代同一个字典? 任何帮助将不胜感激。
答案 0 :(得分:1)
要在Python中迭代整个dict
,您应该使用.iteritems()
。它会在(key, value)
对dict上创建一个新的迭代器。如果您想要list
个项目,也可以使用items()
。
<div class="first">
{% for key, value in categories.iteritems() %}
<li class="{{ key }}"><a href="#{{ key }}">{{ value }}</a></li>
{% endfor %}
</div>
<div class="lenDict">
<h2>{{ categories|length }}</h2>
</div>
<div class="second">
{% for key, value in categories.iteritems() %}
{% for facet in allFacets %}
{% if key == facet.category %}
<p id="{{facet.id}}">{{facet.facet}}</p>
{% endif %}
{% endfor %}
{% endfor %}
</div>
请注意,你的dict将是无序的。如果您想保留密钥的订单,请使用OrderedDict
。
答案 1 :(得分:0)
所以我觉得这很有效。我认为你的问题是facet.category。这是fk吗?因为如果这是一个fk,if语句应该是
{% if category.id == facet.category %}
在python迭代器中不需要重置,所以我认为你不必在模板中重置迭代器。 注意:我会留下这是评论,但代表不够高。