Loading django/views/debug.py +4 −1 Original line number Diff line number Diff line Loading @@ -388,7 +388,10 @@ class ExceptionReporter(object): """ source = None if loader is not None and hasattr(loader, "get_source"): try: source = loader.get_source(module_name) except ImportError: pass if source is not None: source = source.splitlines() if source is None: Loading tests/view_tests/tests/test_debug.py +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ from django.test import TestCase, RequestFactory from django.test.utils import (override_settings, setup_test_template_loader, restore_template_loaders) from django.utils.encoding import force_text, force_bytes from django.utils import importlib, six from django.views.debug import ExceptionReporter from .. import BrokenException, except_args Loading Loading @@ -239,6 +240,21 @@ class ExceptionReporterTests(TestCase): self.assertIn('<h2>Request information</h2>', html) self.assertIn('<p>Request data not supplied</p>', html) @skipIf(six.PY2, 'Bug manifests on PY3 only') def test_unfrozen_importlib(self): """ importlib is not a frozen app, but its loader thinks it's frozen which results in an ImportError on Python 3. Refs #21443. """ try: request = self.rf.get('/test_view/') importlib.import_module('abc.def.invalid.name') except Exception: exc_type, exc_value, tb = sys.exc_info() reporter = ExceptionReporter(request, exc_type, exc_value, tb) html = reporter.get_traceback_html() self.assertIn('<h1>ImportError at /test_view/</h1>', html) class PlainTextReportTests(TestCase): rf = RequestFactory() Loading Loading
django/views/debug.py +4 −1 Original line number Diff line number Diff line Loading @@ -388,7 +388,10 @@ class ExceptionReporter(object): """ source = None if loader is not None and hasattr(loader, "get_source"): try: source = loader.get_source(module_name) except ImportError: pass if source is not None: source = source.splitlines() if source is None: Loading
tests/view_tests/tests/test_debug.py +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ from django.test import TestCase, RequestFactory from django.test.utils import (override_settings, setup_test_template_loader, restore_template_loaders) from django.utils.encoding import force_text, force_bytes from django.utils import importlib, six from django.views.debug import ExceptionReporter from .. import BrokenException, except_args Loading Loading @@ -239,6 +240,21 @@ class ExceptionReporterTests(TestCase): self.assertIn('<h2>Request information</h2>', html) self.assertIn('<p>Request data not supplied</p>', html) @skipIf(six.PY2, 'Bug manifests on PY3 only') def test_unfrozen_importlib(self): """ importlib is not a frozen app, but its loader thinks it's frozen which results in an ImportError on Python 3. Refs #21443. """ try: request = self.rf.get('/test_view/') importlib.import_module('abc.def.invalid.name') except Exception: exc_type, exc_value, tb = sys.exc_info() reporter = ExceptionReporter(request, exc_type, exc_value, tb) html = reporter.get_traceback_html() self.assertIn('<h1>ImportError at /test_view/</h1>', html) class PlainTextReportTests(TestCase): rf = RequestFactory() Loading