Index: django/core/urlresolvers.py
===================================================================
--- django/core/urlresolvers.py	(revision 10682)
+++ django/core/urlresolvers.py	(working copy)
@@ -216,9 +216,8 @@
 
     def _resolve_special(self, view_type):
         callback = getattr(self.urlconf_module, 'handler%s' % view_type)
-        mod_name, func_name = get_mod_func(callback)
         try:
-            return getattr(import_module(mod_name), func_name), {}
+            return get_callable(callback), {}
         except (ImportError, AttributeError), e:
             raise ViewDoesNotExist, "Tried %s. Error was: %s" % (callback, str(e))
 
Index: tests/regressiontests/urlpatterns_reverse/tests.py
===================================================================
--- tests/regressiontests/urlpatterns_reverse/tests.py	(revision 10682)
+++ tests/regressiontests/urlpatterns_reverse/tests.py	(working copy)
@@ -142,4 +142,25 @@
         res = redirect('/foo/')
         self.assertEqual(res['Location'], '/foo/')
         res = redirect('http://example.com/')
-        self.assertEqual(res['Location'], 'http://example.com/')
\ No newline at end of file
+        self.assertEqual(res['Location'], 'http://example.com/')
+
+
+class HandlerResolutionTests(TestCase):
+    def setUp(self):
+        from django.core.urlresolvers import RegexURLResolver
+        urlconf = 'regressiontests.urlpatterns_reverse.urls_handlers'
+        urlconf_callables = 'regressiontests.urlpatterns_reverse.urls_handlers_callable'
+        self.resolver = RegexURLResolver(r'^$', urlconf)
+        self.callable_resolver = RegexURLResolver(r'^$', urlconf_callables)
+    
+    def testNamedHandlers(self):
+        from views import empty_view
+        handler = (empty_view, {})
+        self.assertEqual(self.resolver.resolve404(), handler)
+        self.assertEqual(self.resolver.resolve500(), handler)
+
+    def testCallableHandlers(self):
+        from views import empty_view
+        handler = (empty_view, {})
+        self.assertEqual(self.callable_resolver.resolve404(), handler)
+        self.assertEqual(self.callable_resolver.resolve500(), handler)
Index: tests/regressiontests/urlpatterns_reverse/urls_handlers_callable.py
===================================================================
--- tests/regressiontests/urlpatterns_reverse/urls_handlers_callable.py	(revision 0)
+++ tests/regressiontests/urlpatterns_reverse/urls_handlers_callable.py	(revision 0)
@@ -0,0 +1,7 @@
+from django.conf.urls.defaults import patterns
+from views import empty_view
+
+urlpatterns = patterns('')
+
+handler404 = empty_view
+handler500 = empty_view
Index: tests/regressiontests/urlpatterns_reverse/urls_handlers.py
===================================================================
--- tests/regressiontests/urlpatterns_reverse/urls_handlers.py	(revision 0)
+++ tests/regressiontests/urlpatterns_reverse/urls_handlers.py	(revision 0)
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import patterns
+
+urlpatterns = patterns('')
+
+handler404 = 'regressiontests.urlpatterns_reverse.views.empty_view'
+handler500 = 'regressiontests.urlpatterns_reverse.views.empty_view'
Index: docs/topics/http/urls.txt
===================================================================
--- docs/topics/http/urls.txt	(revision 10682)
+++ docs/topics/http/urls.txt	(working copy)
@@ -244,22 +244,28 @@
 handler404
 ----------
 
-A string representing the full Python import path to the view that should be
-called if none of the URL patterns match.
+A callable, or a string representing the full Python import path to the view
+that should be called if none of the URL patterns match.
 
 By default, this is ``'django.views.defaults.page_not_found'``. That default
 value should suffice.
 
+.. versionchanged:: 1.2
+    Previous versions of Django only accepted strings representing import paths.
+
 handler500
 ----------
 
-A string representing the full Python import path to the view that should be
-called in case of server errors. Server errors happen when you have runtime
-errors in view code.
+A callable, or a string representing the full Python import path to the view
+that should be called in case of server errors. Server errors happen when you
+have runtime errors in view code.
 
 By default, this is ``'django.views.defaults.server_error'``. That default
 value should suffice.
 
+.. versionchanged:: 1.2
+    Previous versions of Django only accepted strings representing import paths.
+
 include
 -------
 
