Переопределение администратора CSS в Django - PullRequest
60 голосов
/ 09 сентября 2011

Я хочу изменить определенные CSS в админке django, например base.css. Что лучше изменить прямо в библиотеке django? Как я могу переопределить это наилучшим образом?

Ответы [ 7 ]

90 голосов
/ 09 сентября 2011

Многое зависит от того, что вы хотите сделать.Хотя в первую очередь: не перезаписывайте его непосредственно в админке Django.У вас есть два варианта, которые я считаю разумными:

  1. Если вы хотите изменить внешний вид администратора в целом, вы должны переопределить шаблоны администратора.Это подробно описано здесь: Переопределение шаблонов администратора .Иногда вы можете просто расширить исходный файл администратора, а затем переписать блок, например {% block extrastyle %}{% endblock %} в django/contrib/admin/templates/admin/base.html.
  2. Если ваш стиль зависит от модели, вы можете добавить дополнительные стили с помощью мета-класса Mediaв вашем admin.py.Смотрите пример здесь:
class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = ('js/admin/my_own_admin.js',)    
        css = {
             'all': ('css/admin/my_own_admin.css',)
        }
24 голосов
/ 09 сентября 2011

Я только что расширил admin / base.html, чтобы включить ссылку на мой собственный файл css - в конце. Прелесть CSS в том, что вам не нужно трогать существующие определения, просто переопределите.

18 голосов
/ 19 мая 2016

Это решение будет работать для сайта администратора, я думаю, что это самый чистый способ, потому что он переопределяет base_site.html, который не меняется при обновлении django.

Создайте в каталоге шаблонов папку admin, в которой создайте файл с именем base_site.html.

Создайте в своем статическом каталоге в css файл с именем admin-extra.css.

Запишите в нем все пользовательские CSS, которые вы хотите для своих форм, например: body{background: #000;}.

Вставьте это в base_site.html:

{% extends "admin/base.html" %}
{% load static from staticfiles %} # This might be just {% load static %} in your ENV

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "css/admin-extra.css" %}" />{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

Вот и все! все готово

16 голосов
/ 30 января 2018
  • В settings.py убедитесь, что ваше приложение указано перед администратором в INSTALLED_APPS.
  • Создайте (your-app)/templates/admin/base_site.html и поместите блок <style> в {% block extrahead %}
13 голосов
/ 06 сентября 2013

В вашем статическом каталоге создайте файл static/admin/css/base.css.

Сначала вставьте CSS администратора по умолчанию в Django и настройте по своему усмотрению.

5 голосов
/ 26 июля 2017

Если вам нужна глобальная область действия, и вы не хотите думать о переопределении шаблонов, миксин действительно работает для этого. Поместите этот код куда хотите:

class CSSAdminMixin(object):
    class Media:
        css = {
            'all': ('css/admin.css',),
        }

Затем создайте CSS-файл с именем admin.css с вашими переопределениями, например:

select[multiple] {
    resize: vertical;
}

Затем в любых моделях, которые вы хотите, выполните:

class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):

И все будет готово.

3 голосов
/ 12 мая 2015

Содержит admin/css/changelists.css внутри папки в STATICFILES_DIRS, и он будет использовать файл changelists.css вместо административного по умолчанию.

...