我在 ListView
中返回有效的 HttpResponse
时遇到了麻烦(我得到的是 ValueError: The view didn't return an HttpResponse object...
. 我已经覆盖了 get
因为我想要返回一个JsonResponse:
def get(self, requets, *args, **kwargs):
queryset = self.get_queryset()
data = serializers.serialize("json", queryset)
return JsonResponse(data, status=200, safe=False)
我已经检查过 queryset
和 data
而 JsonResponse
不是 None
. 更改return语句不起作用:
return HttpResponse(json.dumps(data), content_type="application/json", status=200)
以前,如果我需要覆盖 get
,我会 return render(...)
,这是有效的 .
那么,为什么我的 HttpResponse
或 JsonResponse
根据此实例中的错误而不是可接受的HttpResponse? GET请求将是一个ajax请求,我确实需要提供一些明智的json作为回复 .
编辑:全班
from django.core import serializers
from django.http import JsonResponse
@method_decorator(login_required, name='dispatch')
class AjaxQuestionList(ListView):
"""
Generic ListView for Question objects. Called by front-end app.
Requires hash url parameter to identify Survey.
Intended to be called via ajax. Returns serialized json list of Questions.
"""
http_method_names = ['get',]
def dispatch(self, request, *args, **kwargs):
#allow user to call this View if their Client owns the Survey
self.survey = get_object_or_404(Survey, hash=self.kwargs['hash'])
up = get_object_or_404(UserProfile, fk_user=self.request.user)
self.client = up.fk_client
if self.survey.fk_client != self.client:
raise Http404
super(AjaxQuestionList, self).dispatch(request, *args, **kwargs)
def get_queryset(self):
return Question.objects.filter(fk_survey=self.survey)
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
data = serializers.serialize("json", queryset)
return JsonResponse(data, status=200, safe=False)
追溯:
文件“/webapps/escher/lib/python3.5/site-packages/django/core/handlers/exception.py”在内部39.响应= get_response(请求)文件“/webapps/escher/lib/python3.5 /site-packages/django/core/handlers/base.py“in _legacy_get_response 249. response = self._get_response(request)File”/webapps/escher/lib/python3.5/site-packages/django/core/handlers/ base.py“在_get_response 198.”中返回None . “ %(callback.module,view_name)异常类型:ValueError at / si / survey / 123456789 / ajax-question-list / Exception Value:视图myapp.views.survey.AjaxQuestionList未返回HttpResponse对象 . 它返回了None .
从CBV flattened index我只是假设在 get()
之后自动调用了 render_to_response()
,渲染了返回的HttpResponse get()
. 我错了吗?
1 回答
您需要在调度方法中返回
super()
的结果 .如果没有return语句,该方法将返回
None
,以便您收到错误消息 .