Commit 624caace authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

Fixed #9005: don't wig out when reversing a URL if SETTINGS_MODULE isn't set....

Fixed #9005: don't wig out when reversing a URL if SETTINGS_MODULE isn't set. While I was there, I fixed #10599 by re-raising the original error message, which is almost always a better idea. Thanks, Eric

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10350 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent dc832d77
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -370,14 +370,21 @@ class URLNode(Node):
        url = ''
        try:
            url = reverse(self.view_name, args=args, kwargs=kwargs)
        except NoReverseMatch:
        except NoReverseMatch, e:
            if settings.SETTINGS_MODULE:
                project_name = settings.SETTINGS_MODULE.split('.')[0]
                try:
                    url = reverse(project_name + '.' + self.view_name,
                              args=args, kwargs=kwargs)
                except NoReverseMatch:
                    if self.asvar is None:
                    raise
                        # Re-raise the original exception, not the one with
                        # the path relative to the project. This makes a 
                        # better error message.
                        raise e
            else:
                if self.asvar is None:
                    raise e

        if self.asvar:
            context[self.asvar] = url
+15 −0
Original line number Diff line number Diff line
@@ -153,6 +153,21 @@ class Templates(unittest.TestCase):
        split = token.split_contents()
        self.assertEqual(split, ["sometag", '_("Page not found")', 'value|yesno:_("yes,no")'])

    def test_url_reverse_no_settings_module(self):
        #Regression test for #9005
        from django.template import Template, Context, TemplateSyntaxError
        old_settings_module = settings.SETTINGS_MODULE
        settings.SETTINGS_MODULE = None
        t = Template('{% url will_not_match %}')
        c = Context()
        try:
            rendered = t.render(c)
        except TemplateSyntaxError, e:
            #Assert that we are getting the template syntax error and not the
            #string encoding error.
            self.assertEquals(e.message, "Caught an exception while rendering: Reverse for 'will_not_match' with arguments '()' and keyword arguments '{}' not found.")
        settings.SETTINGS_MODULE = old_settings_module

    def test_templates(self):
        template_tests = self.get_template_tests()
        filter_tests = filters.get_filter_tests()
+1 −1

File changed.

Contains only whitespace changes.