diff --git a/django/views/debug.py b/django/views/debug.py index ccc2753a00..a92f487bb1 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -290,7 +290,7 @@ class ExceptionReporter(object): 'unicode_hint': unicode_hint, 'frames': frames, 'request': self.request, - 'filtered_POST': self.filter.get_post_parameters(self.request), + 'filtered_POST_items': self.filter.get_post_parameters(self.request).items(), 'settings': get_safe_settings(), 'sys_executable': sys.executable, 'sys_version_info': '%d.%d.%d' % sys.version_info[0:3], @@ -301,6 +301,10 @@ class ExceptionReporter(object): 'template_does_not_exist': self.template_does_not_exist, 'postmortem': self.postmortem, } + if self.request is not None: + c['request_GET_items'] = self.request.GET.items() + c['request_FILES_items'] = self.request.FILES.items() + c['request_COOKIES_items'] = self.request.COOKIES.items() # Check whether exception info is available if self.exc_type: c['exception_type'] = self.exc_type.__name__ @@ -913,10 +917,10 @@ Exception Value: {{ exception_value|force_escape }}
- {% for var in request.GET.items %} + {% for k, v in request_GET_items %}{{ var.1|pprint }}
{{ v|pprint }}
{{ var.0 }} | -{{ var.1|pprint }} |
+ {{ k }} | +{{ v|pprint }} |
{{ var.0 }} | -{{ var.1|pprint }} |
+ {{ k }} | +{{ v|pprint }} |
{{ var.0 }} | -{{ var.1|pprint }} |
+ {{ k }} | +{{ v|pprint }} |
items | 'Oops' | '
+ else:
+ value = 'items | u'Oops' | '
+ # GET
+ request = self.rf.get('/test_view/?items=Oops')
+ reporter = ExceptionReporter(request, None, None, None)
+ html = reporter.get_traceback_html()
+ self.assertInHTML(value, html)
+ # POST
+ request = self.rf.post('/test_view/', data={'items': 'Oops'})
+ reporter = ExceptionReporter(request, None, None, None)
+ html = reporter.get_traceback_html()
+ self.assertInHTML(value, html)
+ # FILES
+ fp = six.StringIO('filecontent')
+ request = self.rf.post('/test_view/', data={'name': 'filename', 'items': fp})
+ reporter = ExceptionReporter(request, None, None, None)
+ html = reporter.get_traceback_html()
+ self.assertInHTML(
+ 'items | <InMemoryUploadedFile: ' + 'items (application/octet-stream)> | ',
+ html
+ )
+ # COOKES
+ rf = RequestFactory()
+ rf.cookies['items'] = 'Oops'
+ request = rf.get('/test_view/')
+ reporter = ExceptionReporter(request, None, None, None)
+ html = reporter.get_traceback_html()
+ self.assertInHTML('items | 'Oops' | ', html)
+
class PlainTextReportTests(SimpleTestCase):
rf = RequestFactory()
@@ -519,6 +556,39 @@ class PlainTextReportTests(SimpleTestCase):
reporter = ExceptionReporter(request, None, "I'm a little teapot", None)
reporter.get_traceback_text()
+ def test_request_with_items_key(self):
+ """
+ An exception report can be generated for requests with 'items' in
+ request GET, POST, FILES, or COOKIES QueryDicts.
+ """
+ if six.PY3:
+ value = "items = 'Oops'"
+ else:
+ value = "items = u'Oops'"
+ # GET
+ request = self.rf.get('/test_view/?items=Oops')
+ reporter = ExceptionReporter(request, None, None, None)
+ text = reporter.get_traceback_text()
+ self.assertIn(value, text)
+ # POST
+ request = self.rf.post('/test_view/', data={'items': 'Oops'})
+ reporter = ExceptionReporter(request, None, None, None)
+ text = reporter.get_traceback_text()
+ self.assertIn(value, text)
+ # FILES
+ fp = six.StringIO('filecontent')
+ request = self.rf.post('/test_view/', data={'name': 'filename', 'items': fp})
+ reporter = ExceptionReporter(request, None, None, None)
+ text = reporter.get_traceback_text()
+ self.assertIn('items =