在Django模板中通过键访问特定字典值

时间:2015-04-29 17:51:50

标签: python django django-templates

我知道使用'。'用于访问模板中的字典项的符号(就像this post解释的那样),但是当我尝试访问特定的密钥时,它无法正常工作。出了什么问题?

我的字典: images[mykey] = "the value string"

然后在模板中,我尝试按键访问,但它不起作用:

{% for x in otherdict %}
    {{ x }}
    {{ images.items.x }}
{% endfor %}

我可以循环通过images dict,但是:

{% for k,v in images.items %}
    {{ k }} -- {{ v }}
{% endfor %}

但我需要通过特定密钥访问!

2 个答案:

答案 0 :(得分:0)

您不能开箱即用,但可以使用自定义模板标记。

请查看这张旧的Django门票,了解可能的解决方案,并且理由被拒绝了:Accessing dict values via a value of a variable as key

答案 1 :(得分:0)

参加这个聚会很晚,但这仍然可能对某人有所帮助。它不需要模板标签。您可以非常轻松地定义一个类,该类将允许Django模板语言完成该工作。

class DotDict( dict):
    def __getattr__( self, attr):
        return self[attr] # or, return self.get( attr, default_value)

这是一个各方面的决定,只是您无法在其上使用setattr,因为getattr被重新定义为返回与索引相同的内容。这意味着在Django模板中,您可以做到

{{dotdict.x}}

(如果您不使用.get来提供默认值,则模板引擎会捕获KeyError并安静地返回空白字符串)

您可以使用标准字典的init方法将普通字典转换为DotDict

dotdict = DotDict( ordinary_dict)

在定义渲染上下文时可能很有用。

如果需要,可以从Counter或其他类似dict的对象继承,而不是从简单的dict继承。