Django templates: value of dictionary key with a space in it

前提是你 提交于 2019-12-17 09:46:31

问题


In a Django template, is there a way to get a value from a key that has a space in it? Eg, if I have a dict like:

{"Restaurant Name": Foo}

How can I reference that value in my template? Pseudo-syntax might be:

{{ entry['Restaurant Name'] }} 

回答1:


There is no clean way to do this with the built-in tags. Trying to do something like:

{{ a.'Restaurant Name'}} or {{ a.Restaurant Name }}

will throw a parse error.

You could do a for loop through the dictionary (but it's ugly/inefficient):

{% for k, v in your_dict_passed_into_context %}
   {% ifequal k "Restaurant Name" %}
       {{ v }}
   {% endifequal %}
{% endfor %}

A custom tag would probably be cleaner:

from django import template
register = template.Library()

@register.simple_tag
def dictKeyLookup(the_dict, key):
   # Try to fetch from the dict, and if it's not found return an empty string.
   return the_dict.get(key, '')

and use it in the template like so:

{% dictKeyLookup your_dict_passed_into_context "Restaurant Name" %}

Or maybe try to restructure your dict to have "easier to work with" keys.




回答2:


You can use a custom filter as well.

from django import template
register = template.Library()

@register.filter
def get(mapping, key):
  return mapping.get(key, '')

and within the template

{{ entry|get:"Restaurant Name" }} 


来源:https://stackoverflow.com/questions/2970244/django-templates-value-of-dictionary-key-with-a-space-in-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!