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 и позже исключение будет передано обработчикам ошибок.

Другие вопросы по тегам