CUSTOMISING THE ADMIN SITE

Posted on 15 October 2024 by admin

Having used the Django admin site extensively during development, I came to appreciate its functionality and intuitiveness.  However, I felt that it could do with a little personalisation.

Specifically, I wanted to customise the site header, title suffix, and index title, which by default are "Django Administration", "Django site admin", and "Site administration" respectively. I initially came across a method which involves subclassing admin.AdminSite and overriding the relevant attributes, like so:

from django.contrib import admin
from .models import Post


class CustomAdminSite(admin.AdminSite):
    site_header = "DB's Blog Administration"
    site_title = "Site Admin"
    index_title = "Admin Home"


class PostAdmin(admin.ModelAdmin):
    list_display = ["title", "pub_date", "user"]
    search_fields = ["title"]
    exclude = ["slug"]


custom_admin_site = CustomAdminSite()

custom_admin_site.register(Post, PostAdmin)

But after learning more about the AdminSite class, I realised that subclassing may not be necessary in my case, considering all I wanted was to modify some display text, not the functionality. The solution was to simply override the attributes of the default AdminSite object: 

from django.contrib import admin
from .models import Post


class PostAdmin(admin.ModelAdmin):
    list_display = ["title", "pub_date", "user"]
    search_fields = ["title"]
    exclude = ["slug"]


admin.site.register(Post, PostAdmin)

admin.site.site_header = "DB's Blog Administration"
admin.site.site_title = "Site Admin"
admin.site.index_title = "Admin Home"

This addition yields the following result: