Skip to content

Commit 66e03a5

Browse files
committed
Simplify how the toolbar is inserted in responses.
1 parent 908b49c commit 66e03a5

File tree

1 file changed

+8
-18
lines changed

1 file changed

+8
-18
lines changed

debug_toolbar/middleware.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,6 @@
1717
threading._DummyThread._Thread__stop = lambda x: 1
1818

1919

20-
def replace_insensitive(string, target, replacement):
21-
"""
22-
Similar to string.replace() but is case insensitive.
23-
Code borrowed from:
24-
http://forums.devshed.com/python-programming-11/case-insensitive-string-replace-490921.html
25-
"""
26-
no_case = string.lower()
27-
index = no_case.rfind(target.lower())
28-
if index >= 0:
29-
return string[:index] + replacement + string[index + len(target):]
30-
else: # no results so return the original string
31-
return string
32-
33-
3420
def show_toolbar(request):
3521
"""
3622
Default function to determine whether to show the toolbar on a given page.
@@ -94,10 +80,14 @@ def process_response(self, request, response):
9480
response.set_cookie('djdt', 'hide', 864000)
9581
if ('gzip' not in response.get('Content-Encoding', '') and
9682
response.get('Content-Type', '').split(';')[0] in _HTML_TYPES):
97-
response.content = replace_insensitive(
98-
force_text(response.content, encoding=settings.DEFAULT_CHARSET),
99-
self.insert_before,
100-
force_text(toolbar.render_toolbar() + self.insert_before))
83+
content = force_text(response.content, encoding=settings.DEFAULT_CHARSET)
84+
try:
85+
insert_at = content.lower().rindex(self.insert_before.lower())
86+
except ValueError:
87+
pass
88+
else:
89+
toolbar_content = toolbar.render_toolbar()
90+
response.content = content[:insert_at] + toolbar_content + content[insert_at:]
10191
if response.get('Content-Length', None):
10292
response['Content-Length'] = len(response.content)
10393
return response

0 commit comments

Comments
 (0)