summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAnubhav Joshi <anubhav9042@gmail.com>2014-06-24 09:43:34 +0530
committerTim Graham <timograham@gmail.com>2014-06-24 08:55:36 -0400
commitdbbcfca476e29354c3a5c6221112b55741babc14 (patch)
tree082c8c716f28a8ac41d50ec89c3d76da12bf964b /django
parent150d88cc2c0866ef65f077387e3e560e9c9c3f80 (diff)
Fixed #21668 -- Return detailed error page when SuspiciousOperation is raised and DEBUG=True
Thanks GDorn and gox21 for report. Thanks Tim Graham for idea and review.
Diffstat (limited to 'django')
-rw-r--r--django/core/handlers/base.py2
-rw-r--r--django/views/debug.py14
2 files changed, 9 insertions, 7 deletions
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 2d1d61ce18..162fdc3fed 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -183,6 +183,8 @@ class BaseHandler(object):
'status_code': 400,
'request': request
})
+ if settings.DEBUG:
+ return debug.technical_500_response(request, *sys.exc_info(), status_code=400)
response = self.get_exception_response(request, resolver, 400)
diff --git a/django/views/debug.py b/django/views/debug.py
index eb610b7462..2997f2da7c 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -7,8 +7,8 @@ import sys
import types
from django.conf import settings
-from django.http import (HttpResponse, HttpResponseServerError,
- HttpResponseNotFound, HttpRequest, build_request_repr)
+from django.http import (HttpResponse, HttpResponseNotFound, HttpRequest,
+ build_request_repr)
from django.template import Template, Context, TemplateDoesNotExist
from django.template.defaultfilters import force_escape, pprint
from django.utils.datastructures import MultiValueDict
@@ -65,7 +65,7 @@ def get_safe_settings():
return settings_dict
-def technical_500_response(request, exc_type, exc_value, tb):
+def technical_500_response(request, exc_type, exc_value, tb, status_code=500):
"""
Create a technical server error response. The last three arguments are
the values returned from sys.exc_info() and friends.
@@ -73,10 +73,10 @@ def technical_500_response(request, exc_type, exc_value, tb):
reporter = ExceptionReporter(request, exc_type, exc_value, tb)
if request.is_ajax():
text = reporter.get_traceback_text()
- return HttpResponseServerError(text, content_type='text/plain')
+ return HttpResponse(text, status=status_code, content_type='text/plain')
else:
html = reporter.get_traceback_html()
- return HttpResponseServerError(html, content_type='text/html')
+ return HttpResponse(html, status=status_code, content_type='text/html')
# Cache for the default exception reporter filter instance.
default_exception_reporter_filter = None
@@ -987,7 +987,7 @@ Exception Value: {{ exception_value|force_escape }}
<p>
You're seeing this error because you have <code>DEBUG = True</code> in your
Django settings file. Change that to <code>False</code>, and Django will
- display a standard 500 page.
+ display a standard page generated by the handler for this status code.
</p>
</div>
{% endif %}
@@ -1053,7 +1053,7 @@ Using settings module {{ settings.SETTINGS_MODULE }}{% for k, v in settings.item
You're seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
-display a standard 500 page.
+display a standard page generated by the handler for this status code.
"""
TECHNICAL_404_TEMPLATE = """