我知道使用'。'用于访问模板中的字典项的符号(就像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 %}
但我需要通过特定密钥访问!
答案 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
继承。