Django:将json响应从视图发送到特定模板

时间:2016-08-12 17:05:26

标签: python json django

主要要求是将django视图中的json对象发送到名为output.html的特定模板(已存在于templates目录中),作为响应的一部分。此外,json响应包含模型 pk 属性,我想删除它们并仅发送字段 json属性。

当我尝试如下:

def view_personal_details (request):
  personal_detail_json = personal_details.objects.all()
  personal_detail = serializers.serialize('json', personal_detail_json)
  return HttpResponse (serializers.serialize('json', personal_detail_json), content_type='application/json');

我在新页面中获得了json。

当我尝试如下:

def view_personal_details (request):
  personal_detail_json = personal_details.objects.all()
  personal_detail = serializers.serialize('json', personal_detail_json)
  return render (request, "webFiles/output.html", {'personal_detail': personal_detail})

我必须通过html中的 {{personal_detail}} 访问数据,而不是来自回复。

此外,json响应如下:

[
  {
    model: "buglockerApp.personal_details",
    pk: "001",
    fields: {
      name: "Rajiv Gupta",
      email: "rajiv@247-inc.com",
      doj: "2016-06-22",
      dob: "2016-06-22",
      address: "Bangalore",
      contact: "9909999999"
    }
  }
]

我不希望将模型 pk 作为响应发送。只应将字段作为对webFiles / output.html文件的响应的一部分发送。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

默认序列化程序始终添加模型和pk,以便可以将数据反序列化为对象。您可以编写自定义序列化程序,也可以只删除不需要的数据。

personal_details = [pd['fields'] for pd in personal_details]  

这应该会为您提供一份包含个人详细信息的新词典列表

答案 1 :(得分:0)

您可以在python2.7中执行以下操作

import json
from django.http import JsonResponse

def view_personal_details (request):
    personal_detail = serializers.serialize('json', personal_details.objects.all())
    output = [d['fields'] for d in json.loads(personal_detail)]
    #  return render (request, "webFiles/output.html", {'personal_detail': output})
    #  for ajax response
    return JsonResponse({'personal_detail': output})

或者您可以阅读以下内容以获得更多说明 https://docs.djangoproject.com/en/1.10/topics/serialization/#serialization-of-natural-keys
https://github.com/django/django/blob/master/django/core/serializers/base.py#L53