在Django模板中使用变量作为字典键



1 Answers

像这样创建一个模板标签(在你的项目/模板标签中):

@register.filter
def keyvalue(dict, key):    
    return dict[key]

用法:

{{dictionary|keyvalue:key_variable}}
Question

我想在Django模板中使用变量作为字典中的键。 我不能为我的生活弄清楚如何去做。 如果我有一个带有名称或ID字段的产品,以及带有产品ID索引的评级字典,我希望能够说:

{% for product in product_list %}
     <h1>{{ ratings.product.id }}</h1>
{% endfor %}

在python中,这将通过简单的方式完成

ratings[product.id]

但我不能让它在模板中工作。 我试过用...没有骰子。 想法?




根据eviltnan的回答,如果key不是dict的关键,他的过滤器将引发异常。

过滤器不应该引发异常,但应该优雅地失败 。 这是一个更强大/完整的答案:

@register.filter
def keyvalue(dict, key):    
    try:
        return dict[key]
    except KeyError:
        return ''

基本上,这将与Python代码中的dict.get(key, '')相同,如果您不想包含try / except块,也可以这样编写,尽管它更明确。




Related