Django Grappelli

4.0.3 · active · verified Thu Apr 16

Django Grappelli is a grid-based alternative/extension, essentially a 'jazzy skin,' for the Django administration interface. It aims to improve the usability and aesthetics of the standard Django admin. The current stable version is 4.0.3, which is compatible with Django 5.x. Grappelli's release cycle is closely tied to Django's major versions, ensuring compatibility with the latest stable Django releases.

Common errors

Warnings

Install

Imports

Quickstart

To integrate Grappelli into your Django project, first install it via pip. Then, modify your `settings.py` to add 'grappelli' to `INSTALLED_APPS` *before* `django.contrib.admin`. Ensure `django.template.context_processors.request` is enabled in your TEMPLATES options. In your `urls.py`, include `grappelli.urls` using `django.urls.path` and `include`, again *before* `admin.site.urls`. Finally, collect static files to apply the new admin theme.

import os
from pathlib import Path

# Assuming a standard Django project setup for settings.py and urls.py
# --- settings.py ---

BASE_DIR = Path(__file__).resolve().parent.parent

INSTALLED_APPS = [
    'grappelli',  # Grappelli must be before django.contrib.admin
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # ... other apps
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request', # Required for Grappelli Dashboard/Switch User
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# --- urls.py ---

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('grappelli/', include('grappelli.urls')), # grappelli URLS
    path('admin/', admin.site.urls), # admin site
    # ... other url patterns
]

# After setting up, run:
# python manage.py collectstatic
# python manage.py runserver
# Then visit /admin/ or /grappelli/ (though typically /admin/ is redirected to the grappelli-skinned admin).

view raw JSON →