10

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

my_dict = {"_source": 'xyz'}

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

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

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

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

4

2 回答 2

17

文档提到你不能有一个以下划线开头的变量:

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

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

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

{{ my_dict|get:"_my_key" }}
于 2012-12-04T00:08:45.367 回答
0

就我而言,如果我知道 dict 元素,而且它只有一个,我更喜欢使用以下命令重命名 dict 键pop

my_dict['new_key'] = my_dict.pop('_old_key')

这样我就可以在字典上获得一个新名称,并且可以毫无问题地在模板中访问。

于 2019-01-10T22:36:31.173 回答