Перехват текста ошибки в пользовательском обработчике 500

#django

#django

Вопрос:

Где-то в моих представлениях я выдаю ошибку, особенно эту:

views.py

 from xmlrpclib import Fault

def some_function(request):
    if ....:
        return Fault(-1, 'foo')
  

Затем, также в views.py , у меня есть пользовательский обработчик 500 для перехвата ошибок сервера:

 def my_custom_500(request):
    context = {...}
    ### Here is where I need to catch `'foo'` 
    ### in order to put it in the context and pass it to the template
    render(request, '500.html', context)
  

Есть ли какой-либо способ, с помощью которого я могу получить доступ к сообщению об ошибке?
Спасибо

Ответ №1:

Попробуйте переопределить django.conf.urls.defaults.handler500 в вашем urls.py .

 from django.conf.urls.defaults import *
handler500 = 'path.to.my_custom_500'
  

или еще лучше — напишите свой собственный обработчик и поместите его в LOGGING настройки.

Редактировать:

Вы также можете добавить в свой my_custom_500 код, который будет распознавать тип исключения, например:

 import sys; 

def my_custom_500(request):
    ...
    type_, value, traceback = sys.exc_info()
    ...
  

Комментарии:

1. Это был не мой вопрос. Я уже сделал это переопределение. Что мне нужно, так это получить доступ к сообщению об ошибке, которое вызвало пользовательский 500.

2. Добавьте в свою my_custom_500 функцию: import sys; type, value, traceback = sys.exc_info() и проверьте, что вы получите .

3. да, я только что нашел где-то точно такое же решение … опубликуйте его в качестве ответа, чтобы я мог проголосовать за него