如何在包含名为 items 的键的模板中迭代字典?

问题描述 投票:0回答:1

我有一些相当简单的 django 模板,其中一部分是迭代一些字典(源自一些解析的 json 文件),例如:

{% for k, v in d.items %}

但是我的字典现在包含一个名为

items
的项目,因为对于
a.b
的语法,django 在尝试
a[b]
之前首先尝试将其解析为
getattr(a,b)
(如果可调用,则调用结果),将尝试迭代该键下的值而不是字典。

解决这个问题的好方法是什么?我已经知道我可以编写一个简单地返回

list(d.items())
的过滤器,但这对我来说似乎是错误/浪费的。还有其他方法可以解决这个问题吗?

python django django-templates
1个回答
0
投票

,您可能应该重写字典以不包含

'items'
作为键,所以也许
'children'
是一种替代方案。

这在

{% url … %}
文档[Django-doc]:

中指定

请记住,对于点运算符,字典键查找优先于方法查找。因此,如果数据字典包含名为

'items'
的键,
data.items
将返回
data['items']
而不是
data.items()
如果您想在模板中使用这些方法(items
values
keys
等),请避免添加像字典方法那样命名的键

因此,最好避免使用

items

 作为键。您可以使用以下方法将它们“重新映射”到不同的键:

{'children' if k == 'items' else k: v for k, v in data.items()}
    
© www.soinside.com 2019 - 2024. All rights reserved.