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が重くなってきたりと、色々問題が起きてくることもあり、カスタマイズのしがいがあって面白いです。