Author: mtredinnick
Date: 2008-09-30 00:57:13 -0500 (Tue, 30 Sep 2008)
New Revision: 9100

Added:
   
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/included_urls2.py
Modified:
   django/branches/releases/1.0.X/django/core/urlresolvers.py
   
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/extra_urls.py
   
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/tests.py
Log:
[1.0.X] Fixed another case of reverse URL resolving that wasn't working.

This is a similar situation to that fixed in r9087. We weren't merging
multiple levels of include() calls together correctly.

Backported from r9099 on trunk.


Modified: django/branches/releases/1.0.X/django/core/urlresolvers.py
===================================================================
--- django/branches/releases/1.0.X/django/core/urlresolvers.py  2008-09-30 
05:52:35 UTC (rev 9099)
+++ django/branches/releases/1.0.X/django/core/urlresolvers.py  2008-09-30 
05:57:13 UTC (rev 9100)
@@ -158,12 +158,12 @@
                     p_pattern = p_pattern[1:]
                 if isinstance(pattern, RegexURLResolver):
                     parent = normalize(pattern.regex.pattern)
-                    for name, (matches, pat) in 
pattern.reverse_dict.iteritems():
-                        new_matches = []
-                        for piece, p_args in parent:
-                            new_matches.extend([(piece + suffix, p_args + args)
-                                    for (suffix, args) in matches])
-                        self._reverse_dict.appendlist(name, (new_matches, 
p_pattern + pat))
+                    for name in pattern.reverse_dict:
+                        for matches, pat in pattern.reverse_dict.getlist(name):
+                            new_matches = []
+                            for piece, p_args in parent:
+                                new_matches.extend([(piece + suffix, p_args + 
args) for (suffix, args) in matches])
+                            self._reverse_dict.appendlist(name, (new_matches, 
p_pattern + pat))
                 else:
                     bits = normalize(p_pattern)
                     self._reverse_dict.appendlist(pattern.callback, (bits, 
p_pattern))

Modified: 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/extra_urls.py
===================================================================
--- 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/extra_urls.py
      2008-09-30 05:52:35 UTC (rev 9099)
+++ 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/extra_urls.py
      2008-09-30 05:57:13 UTC (rev 9100)
@@ -8,4 +8,6 @@
 urlpatterns = patterns('',
     url(r'^e-places/(\d+)/$', empty_view, name='extra-places'),
     url(r'^e-people/(?P<name>\w+)/$', empty_view, name="extra-people"),
+    url('', include('regressiontests.urlpatterns_reverse.included_urls2')),
+    url(r'^prefix/(?P<prefix>\w+)/', 
include('regressiontests.urlpatterns_reverse.included_urls2')),
 )

Added: 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/included_urls2.py
===================================================================
--- 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/included_urls2.py
                          (rev 0)
+++ 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/included_urls2.py
  2008-09-30 05:57:13 UTC (rev 9100)
@@ -0,0 +1,14 @@
+"""
+These URL patterns are included in two different ways in the main urls.py, with
+an extra argument present in one case. Thus, there are two different ways for
+each name to resolve and Django must distinguish the possibilities based on the
+argument list.
+"""
+
+from django.conf.urls.defaults import *
+from views import empty_view
+
+urlpatterns = patterns('',
+    url(r'^part/(?P<value>\w+)/$', empty_view, name="part"),
+    url(r'^part2/(?:(?P<value>\w+)/)?$', empty_view, name="part2"),
+)

Modified: 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/tests.py
===================================================================
--- 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/tests.py
   2008-09-30 05:52:35 UTC (rev 9099)
+++ 
django/branches/releases/1.0.X/tests/regressiontests/urlpatterns_reverse/tests.py
   2008-09-30 05:57:13 UTC (rev 9100)
@@ -65,6 +65,12 @@
     ('extra-places', '/e-places/10/', ['10'], {}),
     ('extra-people', '/e-people/fred/', ['fred'], {}),
     ('extra-people', '/e-people/fred/', [], {'name': 'fred'}),
+    ('part', '/part/one/', [], {'value': 'one'}),
+    ('part', '/prefix/xx/part/one/', [], {'value': 'one', 'prefix': 'xx'}),
+    ('part2', '/part2/one/', [], {'value': 'one'}),
+    ('part2', '/part2/', [], {}),
+    ('part2', '/prefix/xx/part2/one/', [], {'value': 'one', 'prefix': 'xx'}),
+    ('part2', '/prefix/xx/part2/', [], {'prefix': 'xx'}),
 
     # Regression for #9038
     # These views are resolved by method name. Each method is deployed twice -


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

Reply via email to