DjangoAdminで自分用のcssやjsを使用する際はテンプレートを上書きするべきか?
DjangoAdminを使用することはとても便利なのですが、cssやjsをカスタマイズしたいと思うことが出てきたりします。
そこで取れる方法としては、テンプレートを上書きするか、ModelAdminのサブクラス内でmediaを書き換えることかなと思います。
個人的には、めちゃくちゃ色々と弄る以外では、テンプレートを書き換えることはすべきではないと思っているので、ここではModelAdminのサブクラスとして、色々なAdminページで使用するベースクラスを作りました。
media propertyを上書きする
上記の通り、ModelAdminのサブクラスでmediaを上書きするようにしました。
from django.contrib.admin import ModelAdmin class BaseModelAdmin(ModelAdmin): css = None js = None @property def media(self): media = super(BaseModelAdmin, self).media if self.css: media._css_lists.append({ 'all': self.css }) if self.js: media._js_lists.append(self.js) return media
そして、使い方としては、Adminページを作る際に、このクラスを継承するようにします。
cssやjsはリストに複数設定可能です。
from django.templatetags.static import static class BookAdmin(BaseModelAdmin): css = [static('admin/css/book.css')] js = [static('admin/js/book.js')]
こんな感じで、テンプレート側を汚さずにcssやjsを追加出来るようになりました。
DjangoAdminは有用なものの、ページ数が増えてきたりするとpaginatorが重くなってきたりと、色々問題が起きてくることもあり、カスタマイズのしがいがあって面白いです。