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,不理睬!

 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不是一些神奇的类,可以猜出你想要的东西,然后去做。

从Django 1.7开始,有一个JsonResponse类 ,它接受参数中的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