我正在尝试使用以下划线字符开头的键访问字典的元素。例如:
my_dict = {"_source": 'xyz'}
我正在尝试在Django模板中访问它们。显然,我意识到您无法从Django模板访问带下划线的python变量(因为它们在Python中被视为私有),但这是一个dict对象,其中任何不可变对象都是有效键。
我无法使用{{my_dict._source}}访问Django模板中的上述字典,因此我认为Django正在阻止它。准确吗?
我有点希望Django对以下划线开头的变量做一些理智的事情,例如仍然进行字典查找(应该尝试做第一件事),但拒绝执行属性查找,方法调用和列表索引查找,因为带下划线的前缀变量将无效。我很快就失去了希望。
作为记录,我知道有人会建议仅更改dict,但这实际上是在ElasticSearch实例上执行REST API请求时,rawes库返回的多层字典。
该文档提到您不能以下划线开头一个变量:
变量名必须由任何字母(AZ),任何数字(0-9),下划线(但不能以下划线开头)或点组成。
但是您可以轻松编写自定义模板过滤器来模仿字典的get方法:
get
@register.filter(name='get') def get(d, k): return d.get(k, None)
和
{{ my_dict|get:"_my_key" }}