Skip to content

Commit 4d829c4

Browse files
committed
Support DEFAULT_CHARSET != 'utf-8'. Fix #15.
1 parent daf14b5 commit 4d829c4

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

debug_toolbar/middleware.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def process_response(self, request, response):
135135
for panel in toolbar.panels:
136136
panel.process_response(request, response)
137137
response.content = replace_insensitive(
138-
force_text(response.content),
138+
force_text(response.content, encoding=settings.DEFAULT_CHARSET),
139139
self.tag,
140140
force_text(toolbar.render_toolbar() + self.tag))
141141
if response.get('Content-Length', None):

tests/tests.py

+15
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# coding: utf-8
2+
13
from __future__ import unicode_literals
24

35
import threading
@@ -161,6 +163,19 @@ def test_url_resolving_bad(self):
161163
self.assertEqual(stats['view_kwargs'], 'None')
162164
self.assertEqual(stats['view_func'], '<no view>')
163165

166+
def test_non_utf8_charset(self):
167+
with self.settings(DEBUG=True,
168+
DEFAULT_CHARSET='iso-8859-1',
169+
INTERNAL_IPS=['127.0.0.1']):
170+
171+
response = self.client.get('/regular/ASCII/')
172+
self.assertContains(response, 'ASCII') # template
173+
self.assertContains(response, 'djDebug') # toolbar
174+
175+
response = self.client.get('/regular/LÀTÍN/')
176+
self.assertContains(response, 'LÀTÍN') # template
177+
self.assertContains(response, 'djDebug') # toolbar
178+
164179

165180
class DebugToolbarNameFromObjectTest(BaseTestCase):
166181
def test_func(self):

tests/urls.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
admin.autodiscover()
1414

15-
urlpatterns = patterns('',
16-
# This pattern should be last to ensure tests still work
17-
url(r'^resolving1/(.+)/(.+)/$', 'tests.views.resolving_view', name='positional-resolving'),
18-
url(r'^resolving2/(?P<arg1>.+)/(?P<arg2>.+)/$', 'tests.views.resolving_view'),
19-
url(r'^resolving3/(.+)/$', 'tests.views.resolving_view', { 'arg2' : 'default' }),
20-
url(r'^execute_sql/$', 'tests.views.execute_sql'),
15+
urlpatterns = patterns('tests.views',
16+
url(r'^resolving1/(.+)/(.+)/$', 'resolving_view', name='positional-resolving'),
17+
url(r'^resolving2/(?P<arg1>.+)/(?P<arg2>.+)/$', 'resolving_view'),
18+
url(r'^resolving3/(.+)/$', 'resolving_view', { 'arg2' : 'default' }),
19+
url(r'^regular/(?P<title>.*)/$', 'regular_view'),
20+
url(r'^execute_sql/$', 'execute_sql'),
2121
)

tests/views.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@
33
from django.contrib.auth.models import User
44
from django.http import HttpResponse
55

6+
67
def execute_sql(request):
78
list(User.objects.all())
8-
99
return HttpResponse()
1010

11+
12+
def regular_view(request, title='Test'):
13+
content = '<html><head><title>%s</title><body></body></html>' % title
14+
return HttpResponse(content)
15+
16+
1117
def resolving_view(request, arg1, arg2):
1218
# see test_url_resolving in tests.py
1319
return HttpResponse()
14-

0 commit comments

Comments
 (0)