在 django 模板中访问具有无效标识符的字典键

Posted

技术标签:

【中文标题】在 django 模板中访问具有无效标识符的字典键【英文标题】:Accessing dictionary keys with invalid identifiers in django templates 【发布时间】:2012-10-02 21:40:04 【问题描述】:

假设我有一本看起来像这样的字典:

settings = 
    'info:ip': '127.0.0.1',
    'info:browser': 'chrome'

我想在 django 模板中访问这些项目,如:

The IP is settings.info:ip .

"info:ip" 是一个有效的字典键,但不是一个有效的变量名或 django 模板名,我似乎无法找到它。

我意识到我可以使用不同的字典键,但由于几个原因它不方便。还有其他方法可以在我的模板中获取该字典键吗?

【问题讨论】:

【参考方案1】:

更新 或者一个通用的模板标签来利用任何文字字符串是允许的

from django.template import Template, Context, defaulttags

@defaulttags.register.simple_tag
def getter(d, key):
    return d.get(key, '')

>>> Template('% getter settings "x:y" %').render(Context("settings":'x:y':1))
1

然后写一个过滤器来解决它呢

from django.template import Template, Context, defaultfilters

@defaultfilters.register.filter(is_save=True)
def tiny_replace(value):
    r = 
    for k, v in value.iteritems():
        r[k.replace(':', '_')] = v
    return r

>>> Template('% with s=settings|tiny_replace %s.x_y% endwith %').render(Context("settings":'x:y':1))
1

【讨论】:

【参考方案2】:

这个呢

settings = 
    'info': 
        'ip': '127.0.0.1',
        'browser': 'chrome'
    

并像 settings.info.ip 一样使用它? 这对你来说是一个选择吗?

【讨论】:

以上是关于在 django 模板中访问具有无效标识符的字典键的主要内容,如果未能解决你的问题,请参考以下文章

当键具有特殊字符时,如何进行 Django 模板字典查找? [复制]

在 django 模板中访问字典值

Django模板访问嵌套数据

Django模板:字典键的值,其中有空格

如何在 Django 模板中获取字典键和值?

在 Django 模板中,如何指定本身就是属性的字典键?