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

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

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

在python这将是一个简单的完成

 ratings[product.id] 

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

您需要预先准备好您的数据,在这种情况下,您应该将两元组列表传递给您的模板:

 {% for product, rating in product_list %} <h1>{{ product.name }}</h1><p>{{ rating }}</p> {% endfor %} 

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

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

用法:

 {{dictionary|keyvalue:key_variable}} 

有一个非常肮脏的解决scheme:

 <div>We need d[{{ k }}]</div> <div>So here it is: {% for key, value in d.items %} {% if k == key %} {{ value }} {% endif %} {% endfor %} </div> 

基于eviltnan的回答,他的filter会引发一个例外,如果key不是dict的关键。

filter不应该引发exception,但应该优雅地失败 。 这是一个更强大/完整的答案:

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

基本上,这和Python代码中的dict.get(key, '')是一样的,如果你不想包含try / except块,也可以这样写,尽pipe它更明确。