2012-10-06 4 views
1

handler500으로 설정된 장고 응용 프로그램이 있습니다. 그것에 사용자 지정 예외 처리기를 추가하고 싶습니다. 프로세스 예외를 처리하는 미들웨어를 생성합니다.django 예외 처리기 미들웨어 및 handler500

뷰가 예외를 발생시키는 경우 장고는 process_exception()을 호출합니다. process_exception()은 None 또는 HttpResponse 객체를 반환해야합니다. HttpResponse 객체를 반환하면 응답이 브라우저에 반환됩니다. 그렇지 않으면, 기본 예외에 차기 처리 https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs#process-exception

내 같은 ErrorMiddleware은 같습니다.이 경우,

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 

브라우저를 결코 :

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

settings의 모습 없습니다 예외가있는 페이지에서 응답을받습니다. 목록에 미들웨어가 없어도 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 스택의 바닥에 미들웨어를 이동하십시오 클라이언트에게가는 길. 장고는 이미 예외를 잡았고 마지막에 넣으면 자체 오류 500 페이지를 렌더링했습니다.