2012-10-06 202 views
1

我有一個Django應用程序與handler500設置。我想添加自定義的異常處理程序。 我創建了一個處理進程異常的中間件:django異常處理程序中間件和處理程序500

Django在視圖引發異常時調用process_exception()。 process_exception()應該返回None或HttpResponse對象。如果它返回一個HttpResponse對象,則該響應將返回給瀏覽器。否則,默認的異常處理踢

https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs#process-exception

ErrorMiddleware樣子:

class ErrorMiddleware(object): 
    def process_exception(self, request, exception): 
     try: 
      #logic goes here 
     except Exception: 
      pass 
     return None 

settings樣子:

MIDDLEWARE_CLASSES = (
    'my.error.ErrorMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 
DEBUG = False 

在這種情況下,我的瀏覽器就不會獲得來自頁面的響應,但有異常。雖然沒有我的中間件名單,我得到handler500正常工作。

我希望執行默認的異常處理機制,而無需在我的中間件中明確調用handler500視圖。

UPD

handler500模塊如下所示:

#imports .... 

def custom_500(request): 
    """ Return an error ID (hash) that can be provided to support """ 
    return render(request, '500.html', { 
     'timestamp': datetime.datetime.now().isoformat(), 
     'diagcode': "hello", 
     } 
    ) 
+1

你可以用你的'handler500'定義來顯示一個模塊嗎? –

回答

3

試試你的中間件移動到MIDDLEWARE_CLASSES堆的底部,所以它是中間件的第一件是獲得對處理請求它的出路給客戶。如果你把它放在最後,我相信Django已經發現了你的異常並且出現了自己的錯誤500頁。