Как получить текстовую страницу с ошибкой Django

Во время разработки я запускаю Django в режиме Debug, и я отправляю данные в свое приложение, используя приложение текстового режима. В идеале мне нужно получить текстовый ответ, когда я получаю код ошибки http 500, поэтому мне не нужно искать реальную ошибку внутри всего этого HTML и Javascript.

Возможно ли получить внутреннюю ошибку сервера Django 500 в виде обычного текста?

Я думаю, что написать промежуточное программное обеспечение, потому что иначе исключение не доступно в 500.html

http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception

class ProcessExceptionMiddleware(object): def process_exception(self, request, exception): t = Template("500 Error: {{ exception }}") response_html = t.render(Context({'exception' : exception })) response = http.HttpResponse(response_html) response.status_code = 500 return response 

Если вы ищете способ получить текстовую страницу с ошибкой при использовании curl , вам нужно добавить HTTP-заголовок X-Requested-With со значением XMLHttpRequest , например

 curl -H 'X-Requested-With: XMLHttpRequest' http://example.com/some/url/ 

Объяснение: это потому, что Django использует метод is_ajax чтобы определить, следует ли возвращать его как обычный текст или HTML. is_ajax в свою очередь смотрит на X-Requested-With .

Существует параметр DEBUG_PROPAGATE_EXCEPTIONS, который заставит Django не перекрывать исключения, поэтому вы можете их увидеть, например, в журналах devserver.

Это улучшение в ответе Yuji, в котором содержится stacktrace, больше инструкций (для нас django newbies) и проще.

Поместите этот код в файл где-нибудь в вашем приложении, например PROJECT_ROOT/MAIN_APP/middleware/exceptions.py , и убедитесь, что у вас есть пустой __init__.py в том же каталоге.

 import traceback from django.http import HttpResponse class PlainExceptionsMiddleware(object): def process_exception(self, request, exception): return HttpResponse(traceback.format_exc(exception), content_type="text/plain", status=500) 

Теперь отредактируйте файл settings.py и найдите MIDDLEWARE_CLASSES = ( . Добавьте еще одну запись, чтобы она MIDDLEWARE_CLASSES = ( так:

 MIDDLEWARE_CLASSES = ( # (all the previous entries) # Plain text exception pages. 'MAIN_APP.middleware.exceptions.PlainExceptionsMiddleware', ) 

Перезапустите django, и вы хорошо пойдете!

Форматирование пользовательского агента.

Если вы похожи на меня и разрабатываете приложение и веб-сайт, поддерживаемые django, вы, вероятно, захотите отобразить в приложении простые текстовые страницы ошибок и хорошие отформатированные в браузере. Простым способом этого является проверка агента пользователя:

 import traceback from django.http import HttpResponse class PlainExceptionsMiddleware(object): def process_exception(self, request, exception): if "HTTP_USER_AGENT" in request.META and "chrome" in request.META["HTTP_USER_AGENT"].lower(): return return HttpResponse(traceback.format_exc(exception), content_type="text/plain", status=500)