【问题标题】:Django: send json response from view to a specific templateDjango:将json响应从视图发送到特定模板
【发布时间】:2016-08-12 17:05:26
【问题描述】:

主要要求是将 json 对象从 django 视图发送到名为 output.html 的特定模板(已经存在于模板目录中),作为响应的一部分。此外,json 响应包含 modelpk 属性,我想删除它们并仅发送 fields 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"
    }
  }
]

我不希望将 modelpk 作为响应发送。只有 fields 应该作为响应 webFiles/output.html 文件的一部分发送。

提前致谢!!

【问题讨论】:

    标签: python json django


    【解决方案1】:

    在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

    【讨论】:

    • 它给了我错误“字符串索引必须是整数”
    • 另外,请向我提出问题的另一部分,即将 json 响应发送到特定页面,因为 HttpResponse 将其发送到一个全新的页面。
    • 成功了。现在没有模型和pk元素。响应部分呢?我们如何将 json 作为 http 响应的一部分发送到特定页面?
    • 我对此有一个疑问:最后一行中的这个personal_details是否作为回复添加。如果是的话,那么如何使用ajax在js中获取它?
    • @RajivGupta 我已经更新了 ajax 响应的代码。请看一看。
    【解决方案2】:

    默认的序列化程序总是添加模型和 pk 以便数据可以反序列化回对象。您可以编写自定义序列化程序,也可以简单地删除不需要的数据。

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

    这应该会给你一个包含个人详细信息的新字典列表

    【讨论】:

    • 它给了我错误“字符串索引必须是整数”
    • 另外,请向我提出问题的另一部分,即将 json 响应发送到特定页面,因为 HttpResponse 将其发送到一个全新的页面。
    • 看起来 Anjaneyulu 已经回答了这一切 :) 但如果我必须回答,那就是一样的
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2018-10-20
    • 2019-01-08
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多