【问题标题】:Django Json ResponseDjango Json 响应
【发布时间】:2014-01-18 20:20:13
【问题描述】:

我只是需要一些帮助,我正在制作一个 Ajax 方法来加载网站中的一些内容:

这是我的方法:

def get_subcat(request, id):
sub_categories = SubCategory.objects.filter(parent_category=id)
return HttpResponse(sub_categories)

这是ajax方法:

function menu_element_hover(id){
$.ajax({
    url:'/catalog/get_subcat/'+id
}).done(function(data){
    alert(data);
}).fail(function(error){
    alert('error');
});

}

问题是,我需要一个 Json 响应,但我得到的只是一个带有子类别的字符串,例如:SnorkelsShirts

如果有人可以帮助我,请 :D,不胜感激!

【问题讨论】:

  • 如果你想返回 JSON,你确实需要,你知道,创建一些 JSON 并返回它?

标签: jquery ajax django json


【解决方案1】:

从 Django 1.7 开始,有一个 JsonResponse class 接受 Python 对象作为参数并返回正确的 HttpResponse

from django.http import JsonResponse
sub_categories = SubCategory.objects.filter(parent_category=id)
return JsonResponse(sub_categories, safe=False)  # Without safe flag, sub_catgeories should be a dict

【讨论】:

  • 我会非常使用这个然后选择的anwer
  • 请注意,该问题已在 2014 年初提出,因此所选答案不再是最新的。我只是发布了正确的替代方案以供将来有人搜索这个问题(尽管 S.O 上的其他问题已经有了这个答案)。不过,感谢您的支持 :)
【解决方案2】:
sub_categories = SubCategory.objects.filter(parent_category=id)

返回查询集,如果您将其作为 HttpResponse 返回,则它会尝试将它们强制转换为人类可读的内容 - 例如字符串。

如果你想返回json,那么首先你需要做类似的事情

from django.utils import simplejson
return HttpResponse(simplejson.dumps(sub_categories))

但是你会遇到下一个问题,因为查询集不是 json 可序列化的。

总而言之,你需要做的就是将内容序列化为 json 格式,如果你想在浏览器/服务器之间移动 json,因为 HttpResponse 不是什么神奇的类,它可以猜出你想要什么并且做吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2021-02-17
    • 2011-06-18
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多