Django模板:字典键的值,其中有空格
Posted
技术标签:
【中文标题】Django模板:字典键的值,其中有空格【英文标题】:Django templates: value of dictionary key with a space in it 【发布时间】:2011-02-27 13:17:32 【问题描述】:在 Django 模板中,有没有办法从包含空格的键中获取值? 例如,如果我有这样的字典:
"Restaurant Name": Foo
如何在我的模板中引用该值?伪语法可能是:
entry['Restaurant Name']
【问题讨论】:
复制:***.com/questions/1906129/… 【参考方案1】:使用内置标签没有干净的方法可以做到这一点。尝试做类似的事情:
a.'Restaurant Name' or a.Restaurant Name
会抛出解析错误。
您可以在字典中执行 for 循环(但它很难看/效率低下):
% for k, v in your_dict_passed_into_context %
% ifequal k "Restaurant Name" %
v
% endifequal %
% endfor %
自定义标签可能更简洁:
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, '')
并像这样在模板中使用它:
% dictKeyLookup your_dict_passed_into_context "Restaurant Name" %
或者也许尝试重新构建您的 dict 以具有“更易于使用”的键。
【讨论】:
如果你的字典是嵌套的,这很好用:result = the_dict; for key in keys: if hasattr(result, 'get'): result = result.get(key, ''); else: break; return result
你知道如何将它与 Django 中的 % if % 标签结合起来吗?我正在尝试做这样的事情 % if dictKeyLookup dict_name "key" % do something % else % do something else【参考方案2】:
您也可以使用自定义过滤器。
from django import template
register = template.Library()
@register.filter
def get(mapping, key):
return mapping.get(key, '')
在模板内
entry|get:"Restaurant Name"
【讨论】:
它对我有用。在应用程序中创建了一个名为 templatetag 的文件夹,其中包含两个文件 init.py 和 get.py(包含上述代码)。还在 html 模板顶部添加了 % load get % 更正,目录应该叫'templatetags';注意末尾的“s”。文档:docs.djangoproject.com/en/2.1/howto/custom-template-tags以上是关于Django模板:字典键的值,其中有空格的主要内容,如果未能解决你的问题,请参考以下文章