Author: adrian
Date: 2006-07-31 21:57:08 -0500 (Mon, 31 Jul 2006)
New Revision: 3506

Modified:
   django/trunk/AUTHORS
   django/trunk/django/conf/urls/defaults.py
   django/trunk/django/core/urlresolvers.py
   django/trunk/docs/url_dispatch.txt
Log:
Fixed #2370 -- It's now possible to pass default URLconf arguments to 
include(). Added docs, as well. Thanks for the patch, [EMAIL PROTECTED]

Modified: django/trunk/AUTHORS
===================================================================
--- django/trunk/AUTHORS        2006-08-01 02:23:24 UTC (rev 3505)
+++ django/trunk/AUTHORS        2006-08-01 02:57:08 UTC (rev 3506)
@@ -70,6 +70,7 @@
     Clint Ecker
     [EMAIL PROTECTED]
     Baishampayan Ghose
+    [EMAIL PROTECTED]
     Espen Grindhaug <http://grindhaug.org/>
     Brant Harris
     [EMAIL PROTECTED]

Modified: django/trunk/django/conf/urls/defaults.py
===================================================================
--- django/trunk/django/conf/urls/defaults.py   2006-08-01 02:23:24 UTC (rev 
3505)
+++ django/trunk/django/conf/urls/defaults.py   2006-08-01 02:57:08 UTC (rev 
3506)
@@ -10,8 +10,10 @@
 def patterns(prefix, *tuples):
     pattern_list = []
     for t in tuples:
-        if type(t[1]) == list:
-            pattern_list.append(RegexURLResolver(t[0], t[1][0]))
+        regex, view_or_include = t[:2]
+        default_kwargs = t[2:]
+        if type(view_or_include) == list:
+            pattern_list.append(RegexURLResolver(regex, view_or_include[0], 
*default_kwargs))
         else:
-            pattern_list.append(RegexURLPattern(t[0], prefix and (prefix + '.' 
+ t[1]) or t[1], *t[2:]))
+            pattern_list.append(RegexURLPattern(regex, prefix and (prefix + 
'.' + view_or_include) or view_or_include, *default_kwargs))
     return pattern_list

Modified: django/trunk/django/core/urlresolvers.py
===================================================================
--- django/trunk/django/core/urlresolvers.py    2006-08-01 02:23:24 UTC (rev 
3505)
+++ django/trunk/django/core/urlresolvers.py    2006-08-01 02:57:08 UTC (rev 
3506)
@@ -130,12 +130,13 @@
         return reverse_helper(self.regex, *args, **kwargs)
 
 class RegexURLResolver(object):
-    def __init__(self, regex, urlconf_name):
+    def __init__(self, regex, urlconf_name, default_kwargs=None):
         # regex is a string representing a regular expression.
         # urlconf_name is a string representing the module containing urlconfs.
         self.regex = re.compile(regex)
         self.urlconf_name = urlconf_name
         self.callback = None
+        self.default_kwargs = default_kwargs or {}
 
     def resolve(self, path):
         tried = []
@@ -149,7 +150,8 @@
                     tried.extend([(pattern.regex.pattern + '   ' + t) for t in 
e.args[0]['tried']])
                 else:
                     if sub_match:
-                        return sub_match[0], sub_match[1], 
dict(match.groupdict(), **sub_match[2])
+                        sub_match_dict = dict(self.default_kwargs, 
**sub_match[2])
+                        return sub_match[0], sub_match[1], 
dict(match.groupdict(), **sub_match_dict)
                     tried.append(pattern.regex.pattern)
             raise Resolver404, {'tried': tried, 'path': new_path}
 

Modified: django/trunk/docs/url_dispatch.txt
===================================================================
--- django/trunk/docs/url_dispatch.txt  2006-08-01 02:23:24 UTC (rev 3505)
+++ django/trunk/docs/url_dispatch.txt  2006-08-01 02:57:08 UTC (rev 3506)
@@ -389,3 +389,45 @@
 
 .. _generic views: http://www.djangoproject.com/documentation/generic_views/
 .. _syndication framework: 
http://www.djangoproject.com/documentation/syndication/
+
+Passing extra options to ``include()``
+--------------------------------------
+
+**New in the Django development version.**
+
+Similarly, you can pass extra options to ``include()``. When you pass extra
+options to ``include()``, *each* line in the included URLconf will be passed
+the extra options.
+
+For example, these two URLconf sets are functionally identical:
+
+Set one::
+
+    # main.py
+    urlpatterns = patterns('',
+        (r'^blog/', include('inner'), {'blogid': 3}),
+    )
+
+    # inner.py
+    urlpatterns = patterns('',
+        (r'^archive/$', 'mysite.views.archive'),
+        (r'^about/$', 'mysite.views.about'),
+    )
+
+Set two::
+
+    # main.py
+    urlpatterns = patterns('',
+        (r'^blog/', include('inner')),
+    )
+
+    # inner.py
+    urlpatterns = patterns('',
+        (r'^archive/$', 'mysite.views.archive', {'blogid': 3}),
+        (r'^about/$', 'mysite.views.about', {'blogid': 3}),
+    )
+
+Note that extra options will *always* be passed to *every* line in the included
+URLconf, regardless of whether the line's view actually accepts those options
+as valid. For this reason, this technique is only useful if you're certain that
+every view in the the included URLconf accepts the extra options you're 
passing.


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

Reply via email to