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