はてなの金次郎

とあるエンジニアの技術系ブログ

Django管理画面のカスタマイズ方法【デザイン】

はじめに

Django管理画面のデザイン変更方法を調べてみると3つほど確認できました。

1. style属性を利用する

Django管理画面のテンプレートにHTMLのstyleタグやstyle属性を追加します。

※ 参考:【Django入門】adminサイトの作り方からカスタマイズまで!

少ない変更で簡単にデザインを変更することができますが、この方法は望ましくありません。文書構造とデザインを分離するために、XHTML1.1ではstyle属性は非推奨とされているためです。style属性は将来的に廃止される可能性もあるので利用するのは避けた方が良さそうです。

※ 参考:style属性

2. django/djangocssをオーバーライドする

django/djangoの管理画面のスタイルシートをオーバーライドします。

任意のディレクトリにオーバーライドするcssファイルを設置します。このとき、cssディレクトリ全てをコピーしても良いですし、オーバーライドしたいファイルのみコピーしてきても良いです。

※ 参考:[Python] Django 管理サイトのカスタマイズ(表示面)

こちらは管理画面のデザインを変更する方法として最も一般的であると思いますが、できれば避けたい方法です。Djangoは日々盛んにアップデートされているのでcssも変更されないとはいえません。実際、GitHubHistoryを確認してみると数ヶ月単位ではありますが、cssもアップデートされています。もしコピーしてきたものとDjangoの本体で差分が発生した場合、追従する必要性が出てくるため、保守が面倒なことになりそうです。

3. Media classを利用する

docs.djangoproject.com

admin.py をカスタマイズする方法です。変更したいデザインがモデル固有のものであれば、以下のようにcssjavascriptを追加することで、その内容を適用することができます。

class MyModelAdmin(admin.ModelAdmin):
    class Media:
      js = ('admin/css/myadmin.js',)
      css = {
        'all': ('admin/css/myadmin.css')
      }

こちらの方法は、Django本体のcssをオーバーライドするわけではないのでメンテナンスが楽です。変更したいデザインがモデル固有のものであれば積極的に採用したい方法です。

※ 参考: Overriding admin css in django