【问题标题】:How to parse a json dumped python dict as javascript object in django template如何将json转储的python dict解析为django模板中的javascript对象
【发布时间】:2017-07-29 05:06:11
【问题描述】:

我有一个 python 代码将普通的字典转换成 JSON,如下所示

groups = {
    'g_1': [
        {'name': 'something', 'id': '1'}, 
        {'name': 'something', 'id': '1'}
    ], 
    'g_2': [
        {'name': 'something', 'id': '1'}, 
        {'name': 'something', 'id': '1'}
    ]
}

我已经使用 json.dumps 将其转换为 json,如下所示

import json
groups = json.dumps(groups)

我想将 javascript 中的数据作为对象读取。如何访问它?

我试过var groups=JSON.parse({{ groups }}) 没有成功。 帮助我将数据解析为 javascript 对象。

【问题讨论】:

  • 以下答案是否让您满意?如果有,请采纳。这是 StackOverflow 中的一个好习惯。

标签: jquery django python-2.7 django-templates


【解决方案1】:

试试:

var groups = JSON && JSON.parse({{ groups }})|| $.parseJSON({{ groups }});

【讨论】:

  • 仍然对我不起作用。该代码将打印出类似 $.parseJSON({'key': 0}) 的内容。并引发 Uncaught SyntaxError: Unexpected token &
【解决方案2】:

这应该可行:

var groups = JSON.parse('{{ groups|safe }}');

【讨论】:

    【解决方案3】:

    ' 字符尝试运行 var groups = "{{ groups|safe }}";var groups = '{{ groups|safe }}'; 时可能会遇到问题。 如果两个答案都不起作用,请尝试以下解决方案:

    function escapeRegExp(str) {
        return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
    }
    function replaceAll(str, find, replace) {
        return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
    }
    
    var str = "{{ groups|safe }}";
    var new_str = replaceAll(str, "'", "\"");
    
    var groups = JSON.parse(new_str);
    

    我必须将字典中的所有 ' 替换为 " 才能使 JSON.parse 正常工作。要了解有关这些功能的更多信息,请查看 Stack How to replace all occurrences of a string in JavaScript 问题。

    【讨论】:

      【解决方案4】:

      对于寻找这个的其他人,

      在视图中:

      import json
      from django.core.serializers.json import DjangoJSONEncoder
      
      ...
      groups = {
      'g_1': [
          {'name': 'something', 'id': '1'}, 
          {'name': 'something', 'id': '1'}
      ], 
      'g_2': [
          {'name': 'something', 'id': '1'}, 
          {'name': 'something', 'id': '1'}
      ]
      }
      ...
      return render(request=request,
                template_name=self.template_name,
                context={'groups' : json.dumps(groups, cls=DjangoJSONEncoder),})
      

      在模板中:

      var groups = {{groups|safe}};
      

      Info on DjangoJSONEncoder

      【讨论】:

        猜你喜欢
        • 2016-11-13
        • 2018-11-15
        • 2018-09-30
        • 2011-06-09
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        相关资源
        最近更新 更多