From 2e72445fce44d95914921448af846ff7a2f70167 Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Wed, 9 Jul 2008 16:01:33 +0000 Subject: [PATCH] newforms-admin: Added autodiscover functionality to django.contrib.admin. This makes the admin aware of per-app admin.py modules and does an import on them when explicitly called. Docs show how this is used. Fixed #6003, #6776, #6776. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7872 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/__init__.py | 13 +++++++++++++ docs/admin.txt | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/django/contrib/admin/__init__.py b/django/contrib/admin/__init__.py index 6a459ec22a..56b64faacb 100644 --- a/django/contrib/admin/__init__.py +++ b/django/contrib/admin/__init__.py @@ -1,3 +1,16 @@ from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL from django.contrib.admin.options import StackedInline, TabularInline from django.contrib.admin.sites import AdminSite, site + +def autodiscover(): + """ + Auto-discover INSTALLED_APPS admin.py modules and fail silently when + not present. This forces an import on them to register any admin bits they + may want. + """ + from django.conf import settings + for app in settings.INSTALLED_APPS: + try: + __import__("%s.admin" % app) + except ImportError: + pass diff --git a/docs/admin.txt b/docs/admin.txt index 996930fc2b..08cafc2450 100644 --- a/docs/admin.txt +++ b/docs/admin.txt @@ -609,11 +609,16 @@ In this example, we register the default ``AdminSite`` instance # urls.py from django.conf.urls.defaults import * from django.contrib import admin + + admin.autodiscover() urlpatterns = patterns('', ('^admin/(.*)', admin.site.root), ) +Above we used ``admin.autodiscover()`` to automatically load the +``INSTALLED_APPS`` admin.py modules. + In this example, we register the ``AdminSite`` instance ``myproject.admin.admin_site`` at the URL ``/myadmin/`` :: @@ -625,6 +630,10 @@ In this example, we register the ``AdminSite`` instance ('^myadmin/(.*)', admin_site.root), ) +There is really no need to use autodiscover when using your own ``AdminSite`` +instance since you will likely be importing all the per-app admin.py modules +in your ``myproject.admin`` module. + Note that the regular expression in the URLpattern *must* group everything in the URL that comes after the URL root -- hence the ``(.*)`` in these examples.