Django: как получить экземпляр исключения в обработчиках ошибок
Django имеет встроенные представления по умолчанию, которые используются автоматически при исключениях, таких как PermissionDenied
, Http404
, SuspiciousOperation
и т. д. подняты. Это удобная особенность Django, которую я люблю, но, похоже, у нее есть ограничение.
Я поднимаю исключение с сообщением: raise PermissionDenied('You are not an xyz and have no access to foobar')
Есть ли в шаблонах переменная контекста, содержащая исходный экземпляр исключения (т.е. 403.html
) вызывается исходными обработчиками ошибок, чтобы я мог получить доступ к сообщению?
Если нет, возможно ли получить исходное исключение с помощью специального обработчика (settings.handler403
и т. д.), чтобы я мог вставить это в контекст?
ПРИМЕЧАНИЕ. Я считаю, что могу создать собственное промежуточное ПО с process_exception
, но я хотел бы избежать этого, если это возможно, так как я предполагаю, что я буду дублировать существующую логику Django, и ее будет проще использовать повторно. Кроме того, это выглядит как обычай process_exception
переопределит вход в систему django.core.handlers.base
среди других поведений. Реализовать все это только для того, чтобы вставить информацию об исключении в шаблон ошибки, было довольно глупо.
1 ответ
Эта функция была реализована как билет 24733.
В Django 1.9 и позже исключение будет передано обработчикам ошибок.