From 6b4e57d79f49b3dfb297505840663ee13d7cf500 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Fri, 5 Apr 2019 14:45:41 +0200 Subject: [PATCH] Refs #30324 -- Forced utf-8 encoding when loading templates for the technical 404 debug and congrats page. --- django/views/debug.py | 4 ++-- tests/view_tests/tests/test_debug.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/django/views/debug.py b/django/views/debug.py index 18e961aa55a..cb3e8c7ec10 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -497,7 +497,7 @@ def technical_404_response(request, exception): module = obj.__module__ caller = '%s.%s' % (module, caller) - with Path(CURRENT_DIR, 'templates', 'technical_404.html').open() as fh: + with Path(CURRENT_DIR, 'templates', 'technical_404.html').open(encoding='utf-8') as fh: t = DEBUG_ENGINE.from_string(fh.read()) c = Context({ 'urlconf': urlconf, @@ -514,7 +514,7 @@ def technical_404_response(request, exception): def default_urlconf(request): """Create an empty URLconf 404 error response.""" - with Path(CURRENT_DIR, 'templates', 'default_urlconf.html').open() as fh: + with Path(CURRENT_DIR, 'templates', 'default_urlconf.html').open(encoding='utf-8') as fh: t = DEBUG_ENGINE.from_string(fh.read()) c = Context({ 'version': get_docs_version(), diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py index 51b27bf361e..a61e4b24ffa 100644 --- a/tests/view_tests/tests/test_debug.py +++ b/tests/view_tests/tests/test_debug.py @@ -224,6 +224,19 @@ class DebugViewTests(SimpleTestCase): status_code=404 ) + def test_template_encoding(self): + """ + The templates are loaded directly, not via a template loader, and + should be opened as utf-8 charset as is the default specified on + template engines. + """ + with mock.patch.object(DebugPath, 'open') as m: + default_urlconf(None) + m.assert_called_once_with(encoding='utf-8') + m.reset_mock() + technical_404_response(mock.MagicMock(), mock.Mock()) + m.assert_called_once_with(encoding='utf-8') + class DebugViewQueriesAllowedTests(SimpleTestCase): # May need a query to initialize MySQL connection