Tuesday, December 15, 2009

Configuring grappelli in dev environment (django admin ui replacement)

Grappelli is a well polished admin interface for django. The project is hosted at http://code.google.com/p/django-grappelli/ and at github http://github.com/revyver/django-grappelli for forking. I followed the documentation at http://code.google.com/p/django-grappelli/wiki/Installation but couldn't get it to working. Here is what worked for me and could be used for development environment. It is not recommended to be used in the production environment (for that use the front end high performance http server for serving static content css, images and js)

  • django-admin.py startproject bar
  • cd to bar
  • svn checkout http://django-grappelli.googlecode.com/svn/trunk/grappelli/ django-grappelli-read-only
  • mv django-grappelli-read-only grappelli
  • modify settings.py and url.py such that settings.py would look like
  • # Django settings for bar project.

    DEBUG = True
    TEMPLATE_DEBUG = DEBUG

    ADMINS = (
    # ('Your Name', 'your_email@domain.com'),
    )

    MANAGERS = ADMINS

    DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    DATABASE_NAME = 'bar.db' # Or path to database file if using sqlite3.
    DATABASE_USER = '' # Not used with sqlite3.
    DATABASE_PASSWORD = '' # Not used with sqlite3.
    DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
    DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.

    # Local time zone for this installation. Choices can be found here:
    # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
    # although not all choices may be available on all operating systems.
    # If running in a Windows environment this must be set to the same as your
    # system time zone.
    TIME_ZONE = 'UTC'

    # Language code for this installation. All choices can be found here:
    # http://www.i18nguy.com/unicode/language-identifiers.html
    LANGUAGE_CODE = 'en-us'

    SITE_ID = 1

    # If you set this to False, Django will make some optimizations so as not
    # to load the internationalization machinery.
    USE_I18N = True

    # Absolute path to the directory that holds media.
    # Example: "/home/media/media.lawrence.com/"
    MEDIA_ROOT = ''

    # URL that handles the media served from MEDIA_ROOT. Make sure to use a
    # trailing slash if there is a path component (optional in other cases).
    # Examples: "http://media.lawrence.com", "http://example.com/media/"
    MEDIA_URL = ''

    # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
    # trailing slash.
    # Examples: "http://foo.com/media/", "/media/".
    ADMIN_MEDIA_PREFIX = 'http://localhost:8000/admin_media/'

    # Make this unique, and don't share it with anybody.
    SECRET_KEY = '9#-m5-dy581c(wq@gy!70e^_!6j@15m8@)+atng0cjb31a3&6r'

    TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.request",
    )
    # List of callables that know how to import templates from various sources.
    TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
    # 'django.template.loaders.eggs.load_template_source',
    )

    MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    )

    ROOT_URLCONF = 'bar.urls'

    TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/code/bar/grappelli/templates',
    )

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'grappelli',
    )
  • and urls.py would look like
  • from django.conf.urls.defaults import *

    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',
    # Example:
    # (r'^bar/', include('bar.foo.urls')),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    (r'^admin/', include(admin.site.urls)),
    (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/code/bar/grappelli/media/'}),
    (r'^grappelli/', include('grappelli.urls')),
    )
  • then do python manage.py syncdb
  • and then run the webserver with python runserver 0.0.0.0:8000 and open the browser to http://localhost:8000/admin

No comments: