Django Json回复

时间:2014-01-01 02:39:20

标签: jquery ajax django json

我只是需要一些帮助,我正在制作一个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响应,但我得到的是一个带有子类别的String,例如:SnorkelsShirts

如果有人可以帮助我,请:D,不理解!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

sub_categories = SubCategory.objects.filter(parent_category=id)

返回queryset,如果你把它作为HttpResponse返回,那么它会尝试将它们强制转换成人类可读的东西 - 比如字符串。

如果你想返回json,那么首先你需要做一些像

这样的事情
from django.utils import simplejson
return HttpResponse(simplejson.dumps(sub_categories))

但是你会遇到下一个问题,因为queryset不是json serializeable。

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