【问题标题】:Accessing dictionary keys with invalid identifiers in django templates在 django 模板中访问具有无效标识符的字典键
【发布时间】: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 模板名,我似乎无法找到它。

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

【问题讨论】:

    标签: django django-templates


    【解决方案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 }} 一样使用它? 这对你来说是一个选择吗?

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 2013-11-13
        • 2021-10-17
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 2015-07-09
        相关资源
        最近更新 更多