将 Django 模板中的字符串呈现为 json 对象

Rendering a string in django template as json object

我有一个 angular 应用程序可以将 json 数据发送到 django 后端。 django 应用程序将 json 数据保存到数据库中,然后将其拉出以将其发送回 angular 应用程序。我无法让整个链正常工作。

此处是将 json 数据传回模板的视图。

def myview(request, uid):
    formrecord = FormData.objects.get(someid = uid)
    return render(request, 'myview.html', 'formdata':formrecord.data})

下面是 formrecord.data 在上面的 render() 被调用之前的样子:

(Pdb) formrecord.data
u'{"user":{"firstName":"Bob","lastName":"Henderson"}}'

这是我的模板

<script>
var mydata ={{ formdata }};
mydata = JSON.parse(mydata);
console.log(mydata);
</script>

这是渲染的内容:

var mydata ={&quot;user&quot;:{&quot;firstName&quot;:&quot;Bob&quot;,&quot;lastName&quot;:&quot;Henderson&quot;}};

JSON.parse(mydata) 在 JS 端给我一个语法错误。如何让 JS 将字符串正确解析为 JS 对象?

mydata的值不是字符串,你不需要解析它,因为它已经是一个有效的JS对象:var mydata ={"user":{"firstName":"Bob","lastName":"Henderson",}};

您可以继续访问以下属性:mydata.user.firstName

此外,您应该验证存储在模型中的 JSON 数据。您在上面发布的数据无效,因为 JSON 结尾的逗号是非法的。

正如@Arsh Singh 所说,formrecord.data 不是有效的 json,它是 python 的有效 dict,您可以这样尝试:

# views
import json

def myview(request, uid):
    formrecord = FormData.objects.get(someid = uid)
    jsondata = json.dumps(formrecord.data)
    return render(request, 'myview.html', 'formdata':jsondata})

然后在JS块

<script>
  var mydata ={{ formdata }};
  console.log(mydata);
</script>

您必须在您的 JS 文件中使用“|safe”,如下所示:

观看次数

import json

def myview(request, uid):
    formrecord = FormData.objects.get(someid = uid)
    jsondata = json.dumps(formrecord.data)
    return render(request, 'myview.html', 'formdata':jsondata})

然后在JS块

<script>
  var mydata ={{ formdata|safe }};
  console.log(mydata);
</script>

在js块中使用

<script>
  var mydata = JSON.parse("{{formdata|escapejs}}");
  console.log(mydata);
</script