Django template how to look up a dictionary value with a variable

dictionary, django, python, templates

Solution

Write a custom template filter:

from django.template.defaulttags import register
...
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

(I use `.get` so that if the key is absent, it returns none. If you do `dictionary[key]` it will raise a `KeyError` then.)

usage:

{{ mydict|get_item:item.NAME }}

Problem

``` mydict = {"key1":"value1", "key2":"value2"} ``` The regular way to lookup a dictionary value in a Django template is `{{ mydict.key1 }}`, `{{ mydict.key2 }}`. What if the key is a loop variable? ie: ``` {% for item in list %} # where item has an attribute NAME {{ mydict.item.NAME }} # I want to look up mydict[item.NAME] {% endfor %} ``` `mydict.item.NAME` fails. How to fix this?

Original source

Related problems