如何在Django模板中多次迭代同一个字典?

时间:2014-02-25 12:47:14

标签: python django for-loop dictionary django-templates

我有一个名为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模板是否有任何限制我们不能两次迭代同一个字典? 任何帮助将不胜感激。

2 个答案:

答案 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迭代器中不需要重置,所以我认为你不必在模板中重置迭代器。 注意:我会留下这是评论,但代表不够高。