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

时间:2010-05-24 01:48:26

标签: django django-templates

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

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

在python中,这将通过一个简单的

来完成
ratings[product.id]

但我无法在模板中使用它。我试过用...没有骰子。想法?

4 个答案:

答案 0 :(得分:79)

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

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

用法:

{{dictionary|keyvalue:key_variable}}

答案 1 :(得分:20)

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

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

答案 2 :(得分:13)

有一个非常脏解决方案:

<div>We need d[{{ k }}]</div>

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

答案 3 :(得分:8)

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

过滤器不应该引发异常,但应该fail gracefully。这是一个更健全/完整的答案:

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

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