Index: django/contrib/admin/views/decorators.py
===================================================================
--- django/contrib/admin/views/decorators.py	(Revision 3577)
+++ django/contrib/admin/views/decorators.py	(Arbeitskopie)
@@ -104,5 +104,6 @@
                         return http.HttpResponseRedirect(request.path)
             else:
                 return _display_login_form(request, ERROR_MESSAGE)
+    _checklogin._decorated_func = view_func
 
     return _checklogin
Index: django/contrib/admin/views/doc.py
===================================================================
--- django/contrib/admin/views/doc.py	(Revision 3577)
+++ django/contrib/admin/views/doc.py	(Arbeitskopie)
@@ -320,6 +320,19 @@
 def get_readable_field_data_type(field):
     return DATA_TYPE_MAPPING[field.get_internal_type()] % field.__dict__
 
+def undecorate(func, i=0):
+    try:
+        if i > 10: 
+            print "Warning: endless looping !"
+            return func
+
+        if func != func._decorated_func:
+            func = undecorate(func._decorated_func,i+1)
+    except:
+        pass
+
+    return func
+
 def extract_views_from_urlpatterns(urlpatterns, base=''):
     """
     Return a list of views from a list of urlpatterns.
@@ -328,9 +341,9 @@
     """
     views = []
     for p in urlpatterns:
-        if hasattr(p, 'get_callback'):
+        if hasattr(p, '_get_callback'):
             try:
-                views.append((p.get_callback(), base + p.regex.pattern))
+                views.append((undecorate(p._get_callback()), base + p.regex.pattern))
             except ViewDoesNotExist:
                 continue
         elif hasattr(p, '_get_url_patterns'):
Index: django/contrib/auth/decorators.py
===================================================================
--- django/contrib/auth/decorators.py	(Revision 3577)
+++ django/contrib/auth/decorators.py	(Arbeitskopie)
@@ -15,8 +15,10 @@
             return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, quote(request.get_full_path())))
         _checklogin.__doc__ = view_func.__doc__
         _checklogin.__dict__ = view_func.__dict__
+        _checklogin._decorated_func = view_func
 
         return _checklogin
+
     return _dec
 
 login_required = user_passes_test(lambda u: u.is_authenticated())
Index: django/views/decorators/cache.py
===================================================================
--- django/views/decorators/cache.py	(Revision 3577)
+++ django/views/decorators/cache.py	(Arbeitskopie)
@@ -39,4 +39,6 @@
         response = view_func(request, *args, **kwargs)
         add_never_cache_headers(response)
         return response
+    _wrapped_view_func._decorated_func = view_func
+
     return _wrapped_view_func
