【问题标题】:display json text as a friendly list in django admin在 django admin 中将 json 文本显示为友好列表
【发布时间】:2011-03-13 01:41:21
【问题描述】:

我在模型中有一个 JSONField (http://djangosnippets.org/snippets/1478/),我正在尝试找出将数据显示给管理员用户而不是 json 的最佳方式。

有人知道在 django admin 中执行此操作的最佳方法吗?

例如,我想

{u'field_user_name': u'foo bar', u'field_email': u'foo@bar.com'}

显示为

field_user_name = foo bar
field_email = foo@bar.com

【问题讨论】:

  • JSONField 在你的情况下应该返回我认为的有效 Python dict。例如,您可以在模板中发送该字典并使用模板 for 循环显示它。
  • 您的意思是希望能够在管理应用程序中修改此 json 字段,通过以另一种格式显示它?
  • Sébastien -- 不,我只想在管理部分以友好的格式显示它,最好不要修改模板。

标签: django json django-admin


【解决方案1】:

也许创建一个自定义小部件?

class FlattenJsonWidget(TextInput):
    def render(self, name, value, attrs=None):
        if not value is None:
            parsed_val = ''
            for k, v in dict(value):
                parsed_val += " = ".join([k, v])
            value = parsed_val
        return super(FlattenJsonWidget, self).render(name, value, attrs)

【讨论】:

    【解决方案2】:

    也许您应该创建一个模板过滤器来执行此操作:

    from django import template
    from django.utils import simplejson as json
    
    register = template.Library()
    
    @register.filter
    def json_list(value):
        """
        Returns the json list formatted for display
        Use it like this :
    
        {{ myjsonlist|json_list }}
        """
        try:
            dict = json.loads(value)
            result = []
            for k, v in dict.iteritems():
                result.append(" = ".join([k,v]))
            return "<br/>".join(result)
        except:
            return value
    

    【讨论】:

    • 这很好,但是有没有不使用模板的方法呢?我希望能够在许多不同的应用程序中使用它,但这种方法可能会变得很麻烦。
    猜你喜欢
    • 2021-10-03
    • 2011-05-02
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2018-06-17
    • 2016-04-23
    相关资源
    最近更新 更多