Index: django/conf/urls/defaults.py
===================================================================
--- django/conf/urls/defaults.py	(revision 5079)
+++ django/conf/urls/defaults.py	(working copy)
@@ -10,6 +10,9 @@
 def patterns(prefix, *args):
     pattern_list = []
     for t in args:
+        if len(prefix) > 0 and getattr(t, '_callback_str', False):
+            t.callback = prefix + '.' + t._callback_str
+
         if isinstance(t, (list, tuple)):
             pattern_list.append(url(prefix=prefix, *t))
         else:
Index: django/core/urlresolvers.py
===================================================================
--- django/core/urlresolvers.py	(revision 5079)
+++ django/core/urlresolvers.py	(working copy)
@@ -94,13 +94,9 @@
         # which represents the path to a module and a view function name, or a
         # callable object (view).
         self.regex = re.compile(regex)
-        if callable(callback):
-            self._callback = callback
-        else:
-            self._callback = None
-            self._callback_str = callback
         self.default_args = default_args or {}
         self.name = name
+        self.callback = callback
 
     def resolve(self, path):
         match = self.regex.search(path)
@@ -118,6 +114,13 @@
 
             return self.callback, args, kwargs
 
+    def _set_callback(self, callback):
+        if callable(callback):
+            self._callback = callback
+        else:
+            self._callback = None
+            self._callback_str = callback
+
     def _get_callback(self):
         if self._callback is not None:
             return self._callback
@@ -129,7 +132,7 @@
         except AttributeError, e:
             raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))
         return self._callback
-    callback = property(_get_callback)
+    callback = property(_get_callback, _set_callback)
 
     def reverse(self, viewname, *args, **kwargs):
         mod_name, func_name = get_mod_func(viewname)
