尝试使用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"
答案 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