Django基于类的mixin视图不返回HttpResponse对象

时间:2014-09-25 19:16:33

标签: python django django-class-based-views

尝试使用mixin在Django中创建基于类的视图,但不断收到以下错误消息:

ValueError: The view twitter.views.TwitterExampleView didn't return an HttpResponse object.

如下面的代码所示,我从View扩展为应用程序创建基础TwitterView,以处理从Twitter返回的错误消息。该视图进一步扩展到TwitterNetworkView,其中Twitter网络附加到视图。其他类允许对传递给请求的参数进行一些转换。最终的类TwitterExampleView包括用于参数转换的mixin和TwitterNetworkView。它的get方法作为占位符返回一个字符串“blah”。只有当气泡回到调度中时才会呈现响应,所以我忽略了什么?

class TwitterView(View):

  def dispatch(self, request, *args, **kwargs):
    try:
        response = super(TwitterView, self).dispatch(request, *args, **kwargs)
        return render_response(request, response)
    except TwitterApiException, e:
        return return_error(request, e, e.status_code)

class TwitterNetworkView(TwitterView):

    def dispatch(self, request, *args, **kwargs):
        self.network = get_network_or_404(request.user, kwargs['network_id'])
        super(TwitterNetworkView, self).dispatch(request, *args, **kwargs)

class DefineParamsMixin(object):
  def get_params(self):
    return null

class TwitterPagedDefineParams(DefineParamsMixin):
  def get_params(self):
    return define_params(
            Param('page'),
            Param('since'),
            Param('before'),
            Param('limit', transform_func=int)
        )

class TwitterExampleView(TwitterPagedDefineParams, TwitterNetworkView):

  def get(self, request, *args, **kwargs):
    return "blahhhhh"

2 个答案:

答案 0 :(得分:1)

您的dispatch混音中的TwitterNetworkView未返回任何内容。如果没有return语句,则该方法返回None而不是HttpResponse。一个解决方法是让它返回super(TwitterNetworkView, self).dispatch(request, *args, **kwargs)的结果。

答案 1 :(得分:0)

您需要返回HttpResponse个对象。

from django.http import HttpResponse

...

class TwitterExampleView(TwitterPagedDefineParams, TwitterNetworkView):

    def get(self, request, *args, **kwargs):
        return HttpResponse("blahhhhh")

查看https://docs.djangoproject.com/en/1.7/intro/tutorial03/#write-your-first-view