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 に答える