如何在 Django 模板中多次遍历同一个字典?

Posted

技术标签:

【中文标题】如何在 Django 模板中多次遍历同一个字典?【英文标题】:How can I Iterate through the same dictionary multiple times in a Django template? 【发布时间】: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 循环,它的工作正常。如果我两次使用这些字典类别,第二次将不会给出任何结果。 【参考方案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 中,迭代器不需要重置,所以我认为您不必在模板中重置迭代器。 注意:我会将此保留在评论中,但代表不够高。

【讨论】:

以上是关于如何在 Django 模板中多次遍历同一个字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历 Django 模板中的字典?

Django模板遍历字典的方法

显示 % forloop% 的键和值的 Django 模板:如何遍历模板中的字典?

如何遍历 django 模板中的嵌套字典

尝试遍历 django 模板中的嵌套字典

在 django 模板中显示字典索引或键名