2011-07-29 39 views
3

我嘗試在Django中編寫自定義裝飾器。 我想將用戶重定向到自定義登錄頁面,如果他們沒有通過該頁面登錄。 我寫了裝飾器,我調試它。雖然它工作得很好,如果用戶沒有登錄後,用戶登錄提示錯誤爲Django自定義裝飾器重定向問題

The view APPNAME.views.home didn't return an HttpResponse object. 

您可以在下面找到我的代碼。爲什麼我的裝飾者只需在私人alfa頁面進行身份驗證後跳到return wraps(func)(inner_decorator)部分?

感謝

def private_alfa_required():  
def decorator(func): 
    def inner_decorator(request,*args, **kwargs): 
     if 'isPrivateAlfaUser' not in request.session or request.session['isPrivateAlfaUser'] != True: 
      return render_to_response('homepage.html') 

    return wraps(func)(inner_decorator) 

return decorator 

@private_alfa_required() 
def home(request): 
..... 



def home2(request): 
    ..... 

回答

4

因爲你沒有實際調用視圖函數,如果你的測試成功。

​​

作爲第二個注意事項,在這裏不需要包裝的外層,因爲你的裝飾器沒有任何參數。如果你放棄這一點,你也需要在裝飾器上放置()

+0

我已經寫了這樣的方式,但現在它給出了錯誤,因爲'嘗試模塊APPNAME.main.views中的家。錯誤是:'APPNAME.main.views.home'不是可調用的。'其實我不明白裝飾者背後的邏輯。我在哪裏可以找到一份好的文檔? – brsbilgic

+0

某處存在錯誤,可能在您的'views.py'中。發佈「家庭」功能的全部內容,以便我們可以看到可能存在的問題。 –

0

你需要通過上下文來渲染響應

return render_to_response('homepage.html', context_instance=RequestContext(request)) 

或渲染到響應將無法正常工作

+0

我很抱歉,但它沒有工作,或者 – brsbilgic