繁体   English   中英

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

[英]How can I Iterate through the same dictionary multiple times in a Django template?

我有一个叫做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一个循环first工作正常。 但是当谈到div second个循环时,它没有给出任何结果。 另外,div lenDict下的代码也没有给出结果。

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

要在Python中迭代整个dict ,您应该使用.iteritems() 它在dict的(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>

请注意,你的dict将是无序的。 如果要保留密钥的顺序,请使用OrderedDict

所以我觉得这很有效。 我认为你的问题是facet.category。 这是fk吗? 因为如果这是一个fk if语句应该是

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

在python迭代器中不需要重置,所以我认为你不必在模板中重置迭代器。 注意:我会留下这是一个评论,但代表不够高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM