Author: jacob
Date: 2009-04-01 18:09:45 -0500 (Wed, 01 Apr 2009)
New Revision: 10351

Modified:
   django/branches/releases/1.0.X/django/core/management/__init__.py
   django/branches/releases/1.0.X/django/template/defaulttags.py
   django/branches/releases/1.0.X/tests/regressiontests/templates/tests.py
Log:
[1.0.X] 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. Backport of r10350 
from trunk.

Modified: django/branches/releases/1.0.X/django/core/management/__init__.py
===================================================================
--- django/branches/releases/1.0.X/django/core/management/__init__.py   
2009-04-01 22:46:46 UTC (rev 10350)
+++ django/branches/releases/1.0.X/django/core/management/__init__.py   
2009-04-01 23:09:45 UTC (rev 10351)
@@ -325,7 +325,7 @@
     else:
         os.environ['DJANGO_SETTINGS_MODULE'] = '%s.%s' % (project_name, 
settings_name)
 
-    # Import the project module. We add the parent directory to PYTHONPATH to 
+    # Import the project module. We add the parent directory to PYTHONPATH to
     # avoid some of the path errors new users can have.
     sys.path.append(os.path.join(project_directory, os.pardir))
     project_module = __import__(project_name, {}, {}, [''])

Modified: django/branches/releases/1.0.X/django/template/defaulttags.py
===================================================================
--- django/branches/releases/1.0.X/django/template/defaulttags.py       
2009-04-01 22:46:46 UTC (rev 10350)
+++ django/branches/releases/1.0.X/django/template/defaulttags.py       
2009-04-01 23:09:45 UTC (rev 10351)
@@ -371,15 +371,22 @@
         url = ''
         try:
             url = reverse(self.view_name, args=args, kwargs=kwargs)
-        except NoReverseMatch:
-            project_name = settings.SETTINGS_MODULE.split('.')[0]
-            try:
-                url = reverse(project_name + '.' + self.view_name,
+        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:
+                except NoReverseMatch:
+                    if self.asvar is None:
+                        # 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
-                    
+                    raise e
+
         if self.asvar:
             context[self.asvar] = url
             return ''

Modified: 
django/branches/releases/1.0.X/tests/regressiontests/templates/tests.py
===================================================================
--- django/branches/releases/1.0.X/tests/regressiontests/templates/tests.py     
2009-04-01 22:46:46 UTC (rev 10350)
+++ django/branches/releases/1.0.X/tests/regressiontests/templates/tests.py     
2009-04-01 23:09:45 UTC (rev 10351)
@@ -149,6 +149,21 @@
         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()


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to