Fixed #30324 -- Forced utf-8 encoding when loading the template for the technical 500 debug page.
Regression in50b8493
. Related toea542a9
.
This commit is contained in:
parent
9012033138
commit
efb257a017
|
@ -328,14 +328,14 @@ class ExceptionReporter:
|
||||||
|
|
||||||
def get_traceback_html(self):
|
def get_traceback_html(self):
|
||||||
"""Return HTML version of debug 500 HTTP error page."""
|
"""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())
|
t = DEBUG_ENGINE.from_string(fh.read())
|
||||||
c = Context(self.get_traceback_data(), use_l10n=False)
|
c = Context(self.get_traceback_data(), use_l10n=False)
|
||||||
return t.render(c)
|
return t.render(c)
|
||||||
|
|
||||||
def get_traceback_text(self):
|
def get_traceback_text(self):
|
||||||
"""Return plain text version of debug 500 HTTP error page."""
|
"""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())
|
t = DEBUG_ENGINE.from_string(fh.read())
|
||||||
c = Context(self.get_traceback_data(), autoescape=False, use_l10n=False)
|
c = Context(self.get_traceback_data(), autoescape=False, use_l10n=False)
|
||||||
return t.render(c)
|
return t.render(c)
|
||||||
|
|
|
@ -14,3 +14,6 @@ Bugfixes
|
||||||
(:ticket:`30307`).
|
(:ticket:`30307`).
|
||||||
|
|
||||||
* Added compatibility for ``psycopg2`` 2.8 (:ticket:`30331`).
|
* 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`).
|
||||||
|
|
|
@ -7,6 +7,7 @@ import tempfile
|
||||||
import threading
|
import threading
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
|
@ -20,7 +21,8 @@ from django.utils.functional import SimpleLazyObject
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.views.debug import (
|
from django.views.debug import (
|
||||||
CLEANSED_SUBSTITUTE, CallableSettingWrapper, ExceptionReporter,
|
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 (
|
from ..views import (
|
||||||
|
@ -648,6 +650,20 @@ class ExceptionReporterTests(SimpleTestCase):
|
||||||
text = reporter.get_traceback_text()
|
text = reporter.get_traceback_text()
|
||||||
self.assertIn('USER: [unable to retrieve the current user]', 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):
|
class PlainTextReportTests(SimpleTestCase):
|
||||||
rf = RequestFactory()
|
rf = RequestFactory()
|
||||||
|
|
Loading…
Reference in New Issue