当前位置: 首页 > 面试题库 >

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

严琨
2023-03-14
问题内容

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

my_dict = {"_source": 'xyz'}

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

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

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

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


问题答案:

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

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

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

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

{{ my_dict|get:"_my_key" }}


 类似资料:
  • 问题内容: 我想打印出每个选择获得的票数。我在模板中有以下代码: 只是一个字典,而只是一个模型对象。 该消息引发异常: 问题答案: 为了回应/扩展Jeff的评论,我认为你应该针对的只是Choice类中的一个属性,该属性计算与该对象关联的投票数: 然后在模板中,你可以执行以下操作: 模板标签,恕我直言,此解决方案有些过分,但这也不是一个糟糕的解决方案。Django中模板的目标是使你与模板中的代码隔离

  • 问题内容: 我正在将数组传递给我的Django模板。我要访问的阵列中的阵列的各个元素(例如)等等,而不是通过整个阵列循环。 有没有办法在Django模板中做到这一点? 问题答案: 请记住,Django模板中的点符号用于Python中的四种不同符号。在模板中,可以表示以下任何一项: 它按此顺序尝试它们,直到找到匹配项。因此,你将获得列表索引,因为你的对象不是以3为键的dict,没有名为3的属性,也没

  • 问题内容: 我使用Underscore模板。是否可以将外部文件 附加 为模板 ? 在骨干视图中,我有: 在我的html中是: 它运作良好。但是 我需要外部模板 。我尝试: 要么 要么 但它没有用。 问题答案: 编辑:这个答案是旧的和过时的。 我将其删除,但这是“已接受”的答案。我会发表我的意见。 我不再提倡这样做。 相反,我会将所有模板都分成单独的HTML文件。有些人建议异步加载这些文件(Requ

  • 我正在下载一个带有web应用程序的PDF文件,该应用程序是用Spring Boot 2.0.3开发的,使用Thymeleaf,来自管理部分,受Spring Security保护。在本地,它工作正常,但在网上我遇到了以下错误: <代码>组织。特里梅莱夫。例外情况。TemplateInputException:Error resolving template“/email/confirmedbooki

  • 问题内容: 如果我在Django中设置会话变量,例如: 有什么方法可以从模板中访问它,还是必须从视图中检索它,然后将其传递给模板? 询问是因为我想在模板中访问大约10个小会话变量,然后将所有10个从视图传递到模板可能会有些混乱。 (我必须使用会话变量,因为它是HttpResponseRedirect,但是出于我的目的,将变量存储在数据库中是过大的。) 那么-有什么方法可以直接在模板中获取会话变量?

  • 问题内容: 这些PHP代码行中的双下划线是什么意思? 问题答案: 看起来您正在使用Wordpress- 将__定义为转换字符串的函数(类似于及其别名,但具有用于显式指定域的可选参数)。