我有一些相当简单的 django 模板,其中一部分是迭代一些字典(源自一些解析的 json 文件),例如:
{% for k, v in d.items %}
但是我的字典现在包含一个名为
items
的项目,因为对于 a.b
的语法,django 在尝试 a[b]
之前首先尝试将其解析为 getattr(a,b)
(如果可调用,则调用结果),将尝试迭代该键下的值而不是字典。
解决这个问题的好方法是什么?我已经知道我可以编写一个简单地返回
list(d.items())
的过滤器,但这对我来说似乎是错误/浪费的。还有其他方法可以解决这个问题吗?
不,您可能应该重写字典以不包含
'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()}