#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. да, я только что нашел где-то точно такое же решение … опубликуйте его в качестве ответа, чтобы я мог проголосовать за него