diff options
| author | Nick Pope <nick.pope@flightdataservices.com> | 2019-04-05 14:38:35 +0200 |
|---|---|---|
| committer | Carlton Gibson <carlton.gibson@noumenal.es> | 2019-04-05 16:37:22 +0200 |
| commit | 9da25fb832ae9db1a26f3796dcc9df2546d04f2f (patch) | |
| tree | 3527c18bab1f25e0f0fc919a71c6ed8e0f470961 | |
| parent | 54b65b83a2ae01de56d9eb329c59618559c1cc1d (diff) | |
[2.2.x] Fixed #30324 -- Forced utf-8 encoding when loading the template for the technical 500 debug page.
Regression in 50b8493.
Related to ea542a9.
Backport of efb257a01764855a71051d5bcc7fd66c5ad6d210 from master
| -rw-r--r-- | django/views/debug.py | 4 | ||||
| -rw-r--r-- | docs/releases/2.2.1.txt | 3 | ||||
| -rw-r--r-- | tests/view_tests/tests/test_debug.py | 18 |
3 files changed, 22 insertions, 3 deletions
diff --git a/django/views/debug.py b/django/views/debug.py index b59fe29bdd..b9bae8fc1e 100644 --- a/django/views/debug.py +++ b/django/views/debug.py @@ -328,14 +328,14 @@ class ExceptionReporter: def get_traceback_html(self): """Return HTML version of debug 500 HTTP error page.""" - with Path(CURRENT_DIR, 'templates', 'technical_500.html').open() as fh: + with Path(CURRENT_DIR, 'templates', 'technical_500.html').open(encoding='utf-8') as fh: t = DEBUG_ENGINE.from_string(fh.read()) c = Context(self.get_traceback_data(), use_l10n=False) return t.render(c) def get_traceback_text(self): """Return plain text version of debug 500 HTTP error page.""" - with Path(CURRENT_DIR, 'templates', 'technical_500.txt').open() as fh: + with Path(CURRENT_DIR, 'templates', 'technical_500.txt').open(encoding='utf-8') as fh: t = DEBUG_ENGINE.from_string(fh.read()) c = Context(self.get_traceback_data(), autoescape=False, use_l10n=False) return t.render(c) diff --git a/docs/releases/2.2.1.txt b/docs/releases/2.2.1.txt index ab2a609a53..b24db37c1a 100644 --- a/docs/releases/2.2.1.txt +++ b/docs/releases/2.2.1.txt @@ -14,3 +14,6 @@ Bugfixes (:ticket:`30307`). * Added compatibility for ``psycopg2`` 2.8 (:ticket:`30331`). + +* Fixed a regression in Django 2.2 that caused a crash when loading the + template for the technical 500 debug page (:ticket:`30324`). diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py index db23d10d32..cdc01352a9 100644 --- a/tests/view_tests/tests/test_debug.py +++ b/tests/view_tests/tests/test_debug.py @@ -6,6 +6,7 @@ import sys import tempfile from io import StringIO from pathlib import Path +from unittest import mock from django.core import mail from django.core.files.uploadedfile import SimpleUploadedFile @@ -20,7 +21,8 @@ from django.utils.safestring import mark_safe from django.utils.version import PY36 from django.views.debug import ( CLEANSED_SUBSTITUTE, CallableSettingWrapper, ExceptionReporter, - cleanse_setting, technical_500_response, + Path as DebugPath, cleanse_setting, default_urlconf, + technical_404_response, technical_500_response, ) from ..views import ( @@ -610,6 +612,20 @@ class ExceptionReporterTests(SimpleTestCase): text = reporter.get_traceback_text() self.assertIn('USER: [unable to retrieve the current user]', text) + 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. + """ + reporter = ExceptionReporter(None, None, None, None) + with mock.patch.object(DebugPath, 'open') as m: + reporter.get_traceback_html() + m.assert_called_once_with(encoding='utf-8') + m.reset_mock() + reporter.get_traceback_text() + m.assert_called_once_with(encoding='utf-8') + class PlainTextReportTests(SimpleTestCase): rf = RequestFactory() |
