Django template how to look up a dictionary value with a variable
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Meditation
--
Chapters
00:00 Django Template How To Look Up A Dictionary Value With A Variable
00:29 Answer 1 Score 50
01:12 Accepted Answer Score 470
01:33 Answer 3 Score 97
01:52 Answer 4 Score 8
02:09 Thank you
--
Full question
https://stackoverflow.com/questions/8000...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #django #templates #dictionary
#avk47
ACCEPTED ANSWER
Score 470
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 }}
ANSWER 2
Score 97
Fetch both the key and the value from the dictionary in the loop:
{% for key, value in mydict.items %}
    {{ value }}
{% endfor %}
I find this easier to read and it avoids the need for special coding. I usually need the key and the value inside the loop anyway.
ANSWER 3
Score 50
You can't by default. The dot is the separator / trigger for attribute lookup / key lookup / slice.
Dots have a special meaning in template rendering. A dot in a variable name signifies a lookup. Specifically, when the template system encounters a dot in a variable name, it tries the following lookups, in this order:
- Dictionary lookup. Example: foo["bar"]
 - Attribute lookup. Example: foo.bar
 - List-index lookup. Example: foo[bar]
 
But you can make a filter which lets you pass in an argument:
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
@register.filter(name='lookup')
def lookup(value, arg):
    return value[arg]
{{ mydict|lookup:item.name }}
ANSWER 4
Score 8
For me creating a python file named template_filters.py in my App with below content did the job
# coding=utf-8
from django.template.base import Library
register = Library()
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)
usage is like what culebrón said :
{{ mydict|get_item:item.NAME }}