Commit 687d2e96 authored by Lennart Regebro's avatar Lennart Regebro Committed by Claude Paroz
Browse files

Fixed #19827 -- Kept stacktrace in defaulttags exception reraising

Thanks Kronuz for the report and the initial patch.
parent 0ad76843
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -416,7 +416,8 @@ class URLNode(Node):
        url = ''
        try:
            url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)
        except NoReverseMatch as e:
        except NoReverseMatch:
            exc_info = sys.exc_info()
            if settings.SETTINGS_MODULE:
                project_name = settings.SETTINGS_MODULE.split('.')[0]
                try:
@@ -428,10 +429,10 @@ class URLNode(Node):
                        # Re-raise the original exception, not the one with
                        # the path relative to the project. This makes a
                        # better error message.
                        raise e
                        six.reraise(*exc_info)
            else:
                if self.asvar is None:
                    raise e
                    raise

        if self.asvar:
            context[self.asvar] = url
+16 −0
Original line number Diff line number Diff line
@@ -372,6 +372,22 @@ class Templates(TestCase):
        with self.assertRaises(urlresolvers.NoReverseMatch):
            t.render(c)

    @override_settings(TEMPLATE_STRING_IF_INVALID='%s is invalid', SETTINGS_MODULE='also_something')
    def test_url_reverse_view_name(self):
        # Regression test for #19827
        t = Template('{% url will_not_match %}')
        c = Context()
        try:
            t.render(c)
        except urlresolvers.NoReverseMatch:
            tb = sys.exc_info()[2]
            depth = 0
            while tb.tb_next is not None:
                tb = tb.tb_next
                depth += 1
            self.assertTrue(depth > 5,
                "The traceback context was lost when reraising the traceback. See #19827")

    def test_url_explicit_exception_for_old_syntax_at_run_time(self):
        # Regression test for #19280
        t = Template('{% url path.to.view %}')      # not quoted = old syntax