【问题标题】:How can I Iterate through the same dictionary multiple times in a Django template?如何在 Django 模板中多次遍历同一个字典?
【发布时间】:2014-03-27 16:53:55
【问题描述】:

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

【问题讨论】:

  • 检查这个facet.category.lower是否正确?
  • 我已经编辑了代码请看一下
  • 我没有要求编辑代码,这是正确的,我担心的是类别是方面的一个字段? {{facet.facet}} 是什么?
  • 您需要在此处显示您的查看代码。
  • {{facet.facet}} 给出一个构面名称。这段代码工作正常。问题是,如果我只使用其中一个 for 循环,它的工作正常。如果我两次使用这些字典类别,第二次将不会给出任何结果。

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


【解决方案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>

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

【讨论】:

    【解决方案2】:

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

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

    在 python 中,迭代器不需要重置,所以我认为您不必在模板中重置迭代器。 注意:我会将此保留在评论中,但代表不够高。

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 2019-07-14
      • 2018-05-24
      • 2019-10-22
      • 2011-10-11
      • 2017-10-24
      • 2013-09-19
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多