2014-09-25 78 views
0

想使用混入創建在Django基於類的視圖,但不斷收到以下錯誤消息:Django的混入視圖不返回HttpResponse對象

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

如以下代碼中所示,我從View擴展到創建應用的基礎TwitterView,以處理從Twitter返回的錯誤消息。該視圖進一步擴展了Twitter網絡連接到視圖的TwitterNetworkView。其他類允許對傳入請求的參數進行一些轉換。最後一個類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

好吧,不知道我是否理解你的問題。但是,錯誤消息是有道理的。因爲你在.get()方法中返回了'blahhhh'。我的意思是,無論您如何構建視圖,django都期待HttpResponse對象。 – 2014-09-25 19:21:50

+0

你的'render_response'和'return_error'調用返回什麼?除非我在繼承鏈中遺漏了某些東西,否則這些將準備最終的返回值。在你的'TwitterExampleView'情況下獲得'response =「blahhhhh」'。 – 2014-09-25 19:27:13

+0

render_response - > return HttpResponse(data,content_type = content_type,status = status) – 2014-09-25 19:33:53

回答

1

你沒有返回從dispatch什麼。沒有return聲明,該方法返回None而不是HttpResponse。一種修復方法是讓它返回super(TwitterNetworkView, self).dispatch(request, *args, **kwargs)的結果。

+0

你有獵鷹的眼睛 - 我一直在移動,明顯忽略了這一點。謝謝你救我......我自己! :-) – 2014-09-25 19:50:44

0

您需要返回HttpResponse對象。

from django.http import HttpResponse 

... 

class TwitterExampleView(TwitterPagedDefineParams, TwitterNetworkView): 

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

拿你TwitterNetworkView混入看看https://docs.djangoproject.com/en/1.7/intro/tutorial03/#write-your-first-view

+0

我的render_response方法返回一個HttpResponse - > return HttpResponse(data,content_type = content_type,status = status) – 2014-09-25 19:34:09

相關問題