Chcę zmienić niektóre css w admin django, takie jak base.css. Czy lepiej jest zmieniać bezpośrednio w bibliotece django? Jak mogę to najlepiej zastąpić?
django
django-admin
rajan sthapit
źródło
źródło
Odpowiedzi:
Wiele zależy od tego, co chcesz zrobić. Ale przede wszystkim: nie nadpisuj go bezpośrednio w panelu administracyjnym Django. Masz dwie opcje, które uważam za rozsądne:
{% block extrastyle %}{% endblock %}
wdjango/contrib/admin/templates/admin/base.html
jako przykład.Media
meta klasy w plikuadmin.py
. Zobacz przykład tutaj:źródło
settings.py
upewnij się, że Twoja aplikacja jest wymieniona przed administratorem wINSTALLED_APPS
.(your-app)/templates/admin/base_site.html
i umieść<style>
blok w{% block extrahead %}
Przykład:
{% extends "admin/base_site.html" %} {% block extrahead %} <style> .field-__str__ { font-family: Consolas, monospace; } </style> {% endblock %}
źródło
Po prostu rozszerzyłem admin / base.html, aby na końcu zawarł odniesienie do mojego własnego pliku css. Piękno CSS polega na tym, że nie musisz zmieniać istniejących definicji, wystarczy je ponownie zdefiniować.
źródło
To rozwiązanie będzie działać na stronie administratora, myślę, że to najczystszy sposób, ponieważ zastępuje
base_site.html
co nie zmienia się podczas aktualizacji django.Utwórz w katalogu szablonów folder o nazwie
admin
w nim, utwórz plik o nazwiebase_site.html
.Utwórz w swoim katalogu statycznym pod
css
pliku o nazwieadmin-extra.css
.Napisz w nim wszystkie niestandardowe css, które chcesz dla swoich formularzy, takie jak:
body{background: #000;}
.Wklej to w
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 %}
Jak wspomniano w komentarzach: upewnij się, że twoja aplikacja znajduje się przed aplikacją administratora w INSTALLED_APPS, w przeciwnym razie twój szablon nie nadpisuje django
Otóż to! Jesteś skończony
źródło
INSTALLED_APPS
przeciwnym razie Twój szablon nie zastąpi szablonu django.base_site.html
to się nigdy nie zmieni po aktualizacji django? (To znaczy tak, ta odpowiedź ma 3 lata i nadal działa, ale to nie jest gwarancja)W katalogu statycznym utwórz
static/admin/css/base.css
plik.Wklej najpierw domyślny Admin CSS Django , a następnie dodaj swoje dostosowania na dole.
źródło
django.contrib.admin
na liścieINSTALLED_APPS
. Jeśli tego nie zrobisz, collectstatic najpierw znajdzie plik admin base.css, a Twoja dostosowana wersja go nie zastąpi.Jeśli chcesz mieć zasięg globalny i nie chcesz myśleć o nadpisywaniu szablonów, mixin działa w tym przypadku naprawdę dobrze. Umieść ten kod w dowolnym miejscu:
class CSSAdminMixin(object): class Media: css = { 'all': ('css/admin.css',), }
Następnie utwórz plik CSS o nazwie
admin.css
ze swoimi przesłonięciami, na przykład:select[multiple] { resize: vertical; }
Następnie, w dowolnych modelach, zrób:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
I wszystko będzie gotowe.
źródło
Miej
admin/css/changelists.css
wewnątrz folder wSTATICFILES_DIRS
i będzie to użytkownik changelists.css zamiast domyślnego administratora.źródło