How to Change Your Admin Site’s Look, Feel and Behavior in 3 Steps

Sometimes the admin site works great out of the box. Other times, you need to add some custom code to certain parts of your admin site.

Maybe, you want some custom tables that shows your revenue for the month (i.e. you have an e-commerce site), maybe you’d like to create a button so you could upload batch SKUs for product inventory in your e-commerce site.

The sky really is the limit. This post will show you not only how to update and custom the admin templates, but it will also give you a clue to how to update the actual admin views so you can change the behavior of the entire admin interface.

Step 1: Override Admin Templates

Create a an admin directory in your project’s templates directory. Create a subdirectory inside of the admin directory that will be the name of your app (i.e. my_app).

You have some options that you could edit for specific apps:

  • app_index.html
  • change_form.html
  • change_list.html
  • delete_confirmation.html
  • object_history.html

All the other ones, you would just copy into your newly created admin directory.

Step 2: Override Admin View by Subclassing AdminSite

If you’d like to change how your Admin site behaves, you’ll need to subclass django.contrib.admin.AdminSite:

    from django.contrib.admin import AdminSite
    from .models import MyModel
    class MyAdminSite(AdminSite):
        site_header = "My Super Awesome Customized Admin Site"
        # More stuff including view methods that you can also override.

Any method or attribute you find here can be overridden. You can literally change how the entire Admin site behaves and works.

Step 3: Instantiate your Admin Class and Register your Models on it

Once your admin site works the way you want it to, you can instantiate and register your models to it:

    admin_site = MyAdminSite(name="myadmin")
    admin_site.register(MyModel)

Now, you can add your admin to your urlconf:

    from django.conf.urls import url
    from my_app.admin import admin_site

    urlpatterns = [
        url(r'^myadmin/', admin_site.urls),
    ]

Now, you can change the look and feel of you admin site, and even update the behavior of the entire admin site. What would you like to add to your site?

Struggle with the Django Documentation?

If this post helped you, sign up for my newsletter and you'll get a new post each week that will help you master Django ABSOLUTELY FREE!

Powered by ConvertKit