一尘不染

在Django模板中使用前导下划线访问dict元素

elasticsearch

我正在尝试使用以下划线字符开头的键访问字典的元素。例如:

my_dict = {"_source": 'xyz'}

我正在尝试在Django模板中访问它们。显然,我意识到您无法从Django模板访问带下划线的python变量(因为它们在Python中被视为私有),但这是一个dict对象,其中任何不可变对象都是有效键。

我无法使用{{my_dict._source}}访问Django模板中的上述字典,因此我认为Django正在阻止它。准确吗?

我有点希望Django对以下划线开头的变量做一些理智的事情,例如仍然进行字典查找(应该尝试做第一件事),但拒绝执行属性查找,方法调用和列表索引查找,因为带下划线的前缀变量将无效。我很快就失去了希望。

作为记录,我知道有人会建议仅更改dict,但这实际上是在ElasticSearch实例上执行REST API请求时,rawes库返回的多层字典。


阅读 230

收藏
2020-06-22

共1个答案

一尘不染

该文档提到您不能以下划线开头一个变量:

变量名必须由任何字母(AZ),任何数字(0-9),下划线(但不能以下划线开头)或点组成。

但是您可以轻松编写自定义模板过滤器来模仿字典的get方法:

@register.filter(name='get')
def get(d, k):
    return d.get(k, None)

{{ my_dict|get:"_my_key" }}
2020-06-22