我有下面的类来使用表单集显示相关的课程模块
class CourseModuleUpdateView(TemplateResponseMixin, View):
template_name = 'courses/manage/module/formset.html'
course = None
def get_formset(self, data=None):
return ModuleFormSet(instance=self.course, data=data)
def dispatch(self, request, *args, **kwargs):
self.course = get_object_or_404(Course,
id=kwargs['pk'],
owner=request.user)
super(CourseModuleUpdateView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
formset = self.get_formset()
return self.render_to_response({'course': self.course, 'formset': formset})
负责此CBV的Url模式
url(r'^(?P<pk>\d+)/module/$', views.CourseModuleUpdateView.as_view(), name='course_mudule_update')
发出get请求时出现以下错误
回溯:
File "/home/mtali/.virtualenvs/educa/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/mtali/.virtualenvs/educa/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
198. "returned None instead." % (callback.__module__, view_name)
Exception Type: ValueError at /courses/4/module/ Exception Value: The view courses.views.CourseModuleUpdateView didn't return an HttpResponse object. It returned None instead.
我的代码怎么了!我用的是django1.11
根据Django documentation,分派方法应该返回HTTP响应。你知道吗
基于代码的解释。
从Django
View
类的源代码中dispatch方法不仅将请求的方法委托给相应的处理程序,而且还返回处理程序响应。你知道吗
也就是说,在这条线上。你知道吗
在您的
dispatch
方法中调用super(CourseModuleUpdateView, self).dispatch(request, *args, **kwargs)
时,这将调用超类的分派方法(即View
类分派方法)。因为在dispatch
方法上执行以下行之后,请求的http方法是GET
处理程序将被分配给
get
。所以在这种情况下,它大致相当于这个
get
将调用CourseModuleUpdateView
类中的get
方法 i、 e返回有效的HTTP响应。你知道吗
这个响应将到达调用
get
方法的地方。i、 例如,在View
的分派方法中。它将从调用它的地方返回响应,即super(CourseModuleUpdateView, self).dispatch(request, *args, **kwargs)
。由于没有返回从dispatch
方法收到的响应,导致相关问题 更多 >
编程相关推荐