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模板:字典键的值,其中有空格的主要内容,如果未能解决你的问题,请参考以下文章

过滤器和模板变量

Python - 如何在 django 模板中为所有值并排显示两个键的字典值

安卓百度输入法无法输入空格

template有空格会导致循环数据样式错乱

Django模板访问字典键

Python:如何在我的 Django 模板中传递外键的值?