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ć?
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ć?
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 %}
w django/contrib/admin/templates/admin/base.html
jako przykład.Media
meta klasy w pliku admin.py
. Zobacz przykład tutaj:
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
settings.py
upewnij się, że Twoja aplikacja jest wymieniona przed administratorem w INSTALLED_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 %}
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ć.
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 nazwie base_site.html
.
Utwórz w swoim katalogu statycznym pod css
pliku o nazwie admin-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
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.
django.contrib.admin
na liście INSTALLED_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.
Miej admin/css/changelists.css
wewnątrz folder w STATICFILES_DIRS
i będzie to użytkownik changelists.css zamiast domyślnego administratora.