Skip to content

Commit c39853b

Browse files
committed
Fix erroneous ContentNotRenderedError raised by the redirects panel
Panel.process_response() must always return a rendered response. Thanks Hiroki Kiyohara for the report. Fixes #1009
1 parent 038c649 commit c39853b

File tree

5 files changed

+29
-1
lines changed

5 files changed

+29
-1
lines changed

debug_toolbar/panels/redirects.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ def process_response(self, request, response):
2525
# Using SimpleTemplateResponse avoids running global context processors.
2626
response = SimpleTemplateResponse('debug_toolbar/redirect.html', context)
2727
response.cookies = cookies
28+
response.render()
2829
return response

docs/changes.rst

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Change log
22
==========
33

4+
UNRELEASED
5+
----------
6+
7+
* Fix erroneous ``ContentNotRenderedError`` raised by the redirects panel.
8+
49
1.9
510
---
611

tests/test_integration.py

+11
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,17 @@ def test_data_store_id_not_rendered_when_none(self):
227227
self.assertIn(b'id="djDebug"', response.content)
228228
self.assertNotIn(b'data-store-id', response.content)
229229

230+
def test_view_returns_template_response(self):
231+
response = self.client.get('/template_response/basic/')
232+
self.assertEqual(response.status_code, 200)
233+
234+
@override_settings(DEBUG_TOOLBAR_CONFIG={'DISABLE_PANELS': set()})
235+
def test_incercept_redirects(self):
236+
response = self.client.get('/redirect/')
237+
self.assertEqual(response.status_code, 200)
238+
# Link to LOCATION header.
239+
self.assertIn(b'href="/regular/redirect/"', response.content)
240+
230241

231242
@unittest.skipIf(webdriver is None, "selenium isn't installed")
232243
@unittest.skipUnless('DJANGO_SELENIUM_TESTS' in os.environ, "selenium tests not requested")

tests/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
url(r'^resolving2/(?P<arg1>.+)/(?P<arg2>.+)/$', views.resolving_view),
1515
url(r'^resolving3/(.+)/$', views.resolving_view, {'arg2': 'default'}),
1616
url(r'^regular/(?P<title>.*)/$', views.regular_view),
17+
url(r'^template_response/(?P<title>.*)/$', views.template_response_view),
1718
url(r'^regular_jinja/(?P<title>.*)/$', views.regular_jinjia_view),
1819
url(r'^non_ascii_request/$', views.regular_view, {'title': NonAsciiRepr()}),
1920
url(r'^new_user/$', views.new_user),
2021
url(r'^execute_sql/$', views.execute_sql),
2122
url(r'^cached_view/$', views.cached_view),
23+
url(r'^redirect/$', views.redirect_view),
2224
url(r'^__debug__/', include(debug_toolbar.urls)),
2325
]

tests/views.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from __future__ import absolute_import, unicode_literals
44

55
from django.contrib.auth.models import User
6-
from django.http import HttpResponse
6+
from django.http import HttpResponse, HttpResponseRedirect
7+
from django.template.response import TemplateResponse
78
from django.shortcuts import render
89
from django.views.decorators.cache import cache_page
910

@@ -17,6 +18,10 @@ def regular_view(request, title):
1718
return render(request, 'basic.html', {'title': title})
1819

1920

21+
def template_response_view(request, title):
22+
return TemplateResponse(request, 'basic.html', {'title': title})
23+
24+
2025
def new_user(request, username='joe'):
2126
User.objects.create_user(username=username)
2227
return render(request, 'basic.html', {'title': 'new user'})
@@ -39,3 +44,7 @@ def regular_jinjia_view(request, title):
3944
def listcomp_view(request):
4045
lst = [i for i in range(50000) if i % 2 == 0]
4146
return render(request, 'basic.html', {'title': 'List comprehension', 'lst': lst})
47+
48+
49+
def redirect_view(request):
50+
return HttpResponseRedirect('/regular/redirect/')

0 commit comments

Comments
 (0)