2014-02-25 98 views
4

我有一本名为categories的词典。我只是想在Django模板中遍历这个字典两次。下面是我的代码:如何在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> 

当我做这样的first工作正常股利下的第一个循环。 但是,当涉及到div second下的第二个循环时,它没有任何结果。 也divt下的代码也没有结果。

在Django模板中是否有任何限制,我们不能迭代两次相同的字典? 任何帮助将不胜感激。

+0

检查此“facet.category.lower”是否正确? –

+0

我编辑了代码请看看 – Sakeer

+0

我不要求编辑代码,那是正确的,我的担心是类别是一个方面的领域?什么是“{{facet.facet}}”? –

回答

0

所以我认为这可行。我认为你的问题是facet.category。这是一个fk吗?因为如果这是一个FK if语句应该是

{% if category.id == facet.category %} 

在Python的迭代器并不需要重置,所以我不认为你在tamplate重置您的迭代器。 注:我会留下这是在评论,但代表不够高。

1

要在Python中遍历整个dict,应该使用.iteritems()。它通过(key, value)对字典创建一个新的迭代器。如果您需要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> 

请注意,您的字典将无序。如果您想保留密钥的订单,请使用OrderedDict