Commit 89a8990a authored by Brian Rosner's avatar Brian Rosner
Browse files

Moved ModelAdmin.check_dependancies to AdminSite. Make debugging problems why...

Moved ModelAdmin.check_dependancies to AdminSite. Make debugging problems why the admin is not working more apparent.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8274 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 65be5681
Loading
Loading
Loading
Loading
+1 −22
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ from django.forms.models import BaseInlineFormSet
from django.contrib.contenttypes.models import ContentType
from django.contrib.admin import widgets
from django.contrib.admin.util import quote, unquote, get_deleted_objects
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
from django.core.exceptions import PermissionDenied
from django.db import models, transaction
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
@@ -262,10 +262,6 @@ class ModelAdmin(BaseModelAdmin):
        super(ModelAdmin, self).__init__()

    def __call__(self, request, url):
        from django.conf import settings
        if settings.DEBUG:
            self.check_dependancies()

        # Delegate to the appropriate method, based on the URL.
        if url is None:
            return self.changelist_view(request)
@@ -278,23 +274,6 @@ class ModelAdmin(BaseModelAdmin):
        else:
            return self.change_view(request, unquote(url))

    def check_dependancies(self):
        """
        Check that all things needed to run the admin have been correctly installed.
        
        The default implementation checks that LogEntry, ContentType and the
        auth context processor are installed.
        """
        from django.conf import settings
        from django.contrib.admin.models import LogEntry
        
        if not LogEntry._meta.installed:
            raise ImproperlyConfigured("Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application.")
        if not ContentType._meta.installed:
            raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in your INSTALLED_APPS setting in order to use the admin application.")
        if 'django.core.context_processors.auth' not in settings.TEMPLATE_CONTEXT_PROCESSORS:
            raise ImproperlyConfigured("Put 'django.core.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")

    def _media(self):
        from django.conf import settings

+21 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ from django import http, template
from django.contrib.admin import ModelAdmin
from django.contrib.auth import authenticate, login
from django.db.models.base import ModelBase
from django.core.exceptions import ImproperlyConfigured
from django.shortcuts import render_to_response
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
@@ -113,6 +114,23 @@ class AdminSite(object):
        """
        return request.user.is_authenticated() and request.user.is_staff
    
    def check_dependancies(self):
        """
        Check that all things needed to run the admin have been correctly installed.

        The default implementation checks that LogEntry, ContentType and the
        auth context processor are installed.
        """
        from django.conf import settings
        from django.contrib.admin.models import LogEntry

        if not LogEntry._meta.installed:
            raise ImproperlyConfigured("Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application.")
        if not ContentType._meta.installed:
            raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in your INSTALLED_APPS setting in order to use the admin application.")
        if 'django.core.context_processors.auth' not in settings.TEMPLATE_CONTEXT_PROCESSORS:
            raise ImproperlyConfigured("Put 'django.core.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")

    def root(self, request, url):
        """
        Handles main URL routing for the admin app.
@@ -122,6 +140,9 @@ class AdminSite(object):
        if request.method == 'GET' and not request.path.endswith('/'):
            return http.HttpResponseRedirect(request.path + '/')
        
        if settings.DEBUG:
            self.check_dependancies()

        # Figure out the admin base URL path and stash it for later use
        self.root_path = re.sub(re.escape(url) + '$', '', request.path)