from django import template register = template.Library() # Utility used like {{ dict|getval:key_name }} to return value even when using variables in dictionary key @register.filter(name='getval') def getval(tupdict, key_name): """Use this in a template as follows: To retrieve the value of a dict: {{ crime_rates_dict|getval:"Chicago" }} <-- will return value of crime_rates_dict["Chicago"] To retrieve the human-readable value from a choices tuple: {{ country.COUNTRIES|getval:"US" }} <-- will return "United States" in COUNTRIES = (("US", "United States"),) """ value = '' if type(tupdict) == type(()): # Assume this is likely a "choices" list, and the friendly value should be returned try: value = [choice[1] for choice in tupdict if key_name in choice] value = value.pop() except: value = '' elif type(tupdict) == type({}): # This is a regular dictionary, and the requested value should be returned value = tupdict.get(key_name, '') return value