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.htmljako przykład.Mediameta 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.pyupewnij się, że Twoja aplikacja jest wymieniona przed administratorem w INSTALLED_APPS.(your-app)/templates/admin/base_site.htmli 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_APPSprzeciwnym razie Twój szablon nie zastąpi szablonu django.
base_site.htmlto 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.cssplik.
Wklej najpierw domyślny Admin CSS Django , a następnie dodaj swoje dostosowania na dole.
django.contrib.adminna 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.cssze 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.csswewnątrz folder w STATICFILES_DIRSi będzie to użytkownik changelists.css zamiast domyślnego administratora.