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

时间:2012-10-12 05:33:17

标签: django django-templates

说我有一个类似的字典:

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

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

The IP is {{settings.info:ip}} .

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这个怎么样?

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

并像{{ settings.info.ip }}一样使用它? 这是你的选择吗?