1

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

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

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

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

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

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

4

2 回答 2

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
于 2012-10-12T05:58:49.233 回答
0

那这个呢

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

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

于 2012-10-12T06:23:44.117 回答