如何在 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 模板中多次遍历同一个字典?的主要内容,如果未能解决你的问题,请参考以下文章