在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它更明确。