Author: jacob
Date: 2009-01-10 16:54:20 -0600 (Sat, 10 Jan 2009)
New Revision: 9728

Modified:
   django/trunk/django/core/urlresolvers.py
   django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py
   django/trunk/tests/regressiontests/urlpatterns_reverse/urls.py
Log:
In urlconfs, include() may now be used on an iterable of patterns instead of 
just a module string. Refs #6470 -- making the admin use a urlconf is much 
easier with this work done. Thanks, Alex Gaynor.

Modified: django/trunk/django/core/urlresolvers.py
===================================================================
--- django/trunk/django/core/urlresolvers.py    2009-01-10 22:18:14 UTC (rev 
9727)
+++ django/trunk/django/core/urlresolvers.py    2009-01-10 22:54:20 UTC (rev 
9728)
@@ -143,6 +143,8 @@
         # urlconf_name is a string representing the module containing urlconfs.
         self.regex = re.compile(regex, re.UNICODE)
         self.urlconf_name = urlconf_name
+        if not isinstance(urlconf_name, basestring):
+            self._urlconf_module = self.urlconf_name
         self.callback = None
         self.default_kwargs = default_kwargs or {}
         self._reverse_dict = MultiValueDict()
@@ -151,8 +153,8 @@
         return '<%s %s %s>' % (self.__class__.__name__, self.urlconf_name, 
self.regex.pattern)
 
     def _get_reverse_dict(self):
-        if not self._reverse_dict and hasattr(self.urlconf_module, 
'urlpatterns'):
-            for pattern in reversed(self.urlconf_module.urlpatterns):
+        if not self._reverse_dict:
+            for pattern in reversed(self.url_patterns):
                 p_pattern = pattern.regex.pattern
                 if p_pattern.startswith('^'):
                     p_pattern = p_pattern[1:]
@@ -176,7 +178,7 @@
         match = self.regex.search(path)
         if match:
             new_path = path[match.end():]
-            for pattern in self.urlconf_module.urlpatterns:
+            for pattern in self.url_patterns:
                 try:
                     sub_match = pattern.resolve(new_path)
                 except Resolver404, e:
@@ -200,7 +202,13 @@
     urlconf_module = property(_get_urlconf_module)
 
     def _get_url_patterns(self):
-        return self.urlconf_module.urlpatterns
+        patterns = getattr(self.urlconf_module, "urlpatterns", 
self.urlconf_module)
+        try:
+            iter(patterns)
+        except TypeError:
+            raise ImproperlyConfigured("The included urlconf %s doesn't have 
any"
+                "patterns in it" % self.urlconf_name)
+        return patterns
     url_patterns = property(_get_url_patterns)
 
     def _resolve_special(self, view_type):

Modified: django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py
===================================================================
--- django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py     
2009-01-10 22:18:14 UTC (rev 9727)
+++ django/trunk/tests/regressiontests/urlpatterns_reverse/tests.py     
2009-01-10 22:54:20 UTC (rev 9728)
@@ -81,6 +81,7 @@
     ('kwargs_view', '/arg_view/10/', [], {'arg1':10}),
     ('regressiontests.urlpatterns_reverse.views.absolute_kwargs_view', 
'/absolute_arg_view/', [], {}),
     ('regressiontests.urlpatterns_reverse.views.absolute_kwargs_view', 
'/absolute_arg_view/10/', [], {'arg1':10}),
+    ('non_path_include', '/includes/non_path_include/', [], {})
 
 )
 

Modified: django/trunk/tests/regressiontests/urlpatterns_reverse/urls.py
===================================================================
--- django/trunk/tests/regressiontests/urlpatterns_reverse/urls.py      
2009-01-10 22:18:14 UTC (rev 9727)
+++ django/trunk/tests/regressiontests/urlpatterns_reverse/urls.py      
2009-01-10 22:54:20 UTC (rev 9728)
@@ -1,6 +1,10 @@
 from django.conf.urls.defaults import *
 from views import empty_view, absolute_kwargs_view
 
+other_patterns = patterns('',
+    url(r'non_path_include/$', empty_view, name='non_path_include'),
+)
+
 urlpatterns = patterns('',
     url(r'^places/(\d+)/$', empty_view, name='places'),
     url(r'^places?/$', empty_view, name="places?"),
@@ -51,5 +55,9 @@
     url(r'arg_view/(?P<arg1>\d+)/$', 'kwargs_view'),
     url(r'absolute_arg_view/(?P<arg1>\d+)/$', absolute_kwargs_view),
     url(r'absolute_arg_view/$', absolute_kwargs_view),
+    
+    url('^includes/', include(other_patterns)),
 
 )
+
+


--~--~---------~--~----~------------~-------~--~----~
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