10

我想爲我的一些Django頁面返回410個錯誤,而不是返回404s。基本上,而不是打電話raise Http404('some error message'),我想改爲撥打raise Http410('some error message')快捷方式。如何在Django中引發410錯誤

我很困惑,因爲在django.http,功能HTTP404很簡單:

class Http404(Exception): 
    pass 

所以,如果我做同樣的事情,創造我的Http410的功能,我相信它會看起來像:

class Http410(Exception): 
    pass 

但是,這樣做會返回異常,但會提供500錯誤頁面。我如何重新創建Http404異常的魔力?我應該注意到,我需要從我的模型(而不是視圖)中引發異常,所以我不能只返回一個HttpResponseGone。

在此先感謝!

更新: 我完全知道HttpResponseGone並在我的原始問題中提到了這一點。我已經知道如何在我的意見中回覆這個問題。我的問題是:你如何引發Http 410異常,類似於你如何引發Http 404異常?我希望能夠在任何地方提出這種例外情況,而不僅僅是我的觀點。謝謝!

回答

16

Django不包括一種機制,這是因爲走了應該是正常的工作流程,不是一個錯誤,但是如果你想不把它當作返回響應,並作爲例外,只是實現middleware

class MyGoneMiddleware(object): 
    def process_exception(self, request, exception): 
     if isinstance(exception, Http410): 
      return HttpResponseGone("Gone!") 
     return None 
+0

完美。謝謝! – Spike 2010-11-18 01:49:17

+0

另外,感謝您的評論,關於如何去應該是正常的工作流程,而不是錯誤的情況。我會牢記這一點。 – Spike 2010-11-18 01:51:01

+0

@Spike爲什麼你不能只返回一個'HttpResponseGone'對象而不是引發異常並讓中間件注入對象? – Santa 2010-11-18 08:08:28

22
from django.http import HttpResponse 
return HttpResponse(status=410) 
11

返回一個HttpResponseGoneHttpResponse一個子類,在您的視圖處理程序。