Ich möchte bestimmte CSS in Admin Django wie base.css ändern. Ist es besser, direkt in der Django-Bibliothek zu wechseln? Wie kann ich es am besten überschreiben?
django
django-admin
Rajan Sthapit
quelle
quelle
Antworten:
Es hängt viel davon ab, was Sie tun möchten. Zuallererst: Überschreiben Sie es nicht direkt im Django-Administrator. Sie haben zwei Möglichkeiten, die ich für vernünftig halte:
{% block extrastyle %}{% endblock %}
indjango/contrib/admin/templates/admin/base.html
als Beispiel überschreiben .Media
Meta-Klasse in Ihrem hinzufügenadmin.py
. Sehen Sie hier ein Beispiel:quelle
settings.py
, stellen Sie sicher , dass Ihre App vor admin in der aufgeführt istINSTALLED_APPS
.(your-app)/templates/admin/base_site.html
und setzen Sie den<style>
Block in die{% block extrahead %}
Beispiel:
{% extends "admin/base_site.html" %} {% block extrahead %} <style> .field-__str__ { font-family: Consolas, monospace; } </style> {% endblock %}
quelle
Ich habe gerade admin / base.html erweitert, um einen Verweis auf meine eigene CSS-Datei aufzunehmen - am Ende. Das Schöne an CSS ist, dass Sie vorhandene Definitionen nicht berühren müssen, sondern nur neu definieren müssen.
quelle
Diese Lösung funktioniert für die Admin-Site. Ich denke, es ist der sauberste Weg, da sie überschreibt,
base_site.html
was sich beim Upgrade von Django nicht ändert.Erstellen Sie in Ihrem Vorlagenverzeichnis einen Ordner mit dem Namen "
admin
Erstellen" und erstellen Sie eine Datei mit dem Namenbase_site.html
.Erstellen Sie in Ihrem statischen Verzeichnis unter
css
einer Datei namensadmin-extra.css
.Schreiben Sie darin alle benutzerdefinierten CSS, die Sie für Ihre Formulare benötigen, wie :
body{background: #000;}
.Fügen Sie dies ein in
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 %}
Wie in den Kommentaren erwähnt: Stellen Sie sicher, dass sich Ihre App vor der Admin-App in INSTALLED_APPS befindet, da Ihre Vorlage sonst Djangos nicht überschreibt
Das ist es! du bist fertig
quelle
INSTALLED_APPS
befindet. Andernfalls überschreibt Ihre Vorlage Djangos nicht.base_site.html
das beim Upgrade von Django nie ändern wird? (Ich meine ja diese Antwort ist 3 Jahre alt und immer noch funktioniert , aber das ist kein garantuee)Erstellen Sie in Ihrem statischen Verzeichnis eine
static/admin/css/base.css
Datei.Fügen Sie zuerst Djangos Standard-Admin-CSS ein und fügen Sie dann unten Ihre Anpassungen hinzu.
quelle
django.contrib.admin
der Liste vonINSTALLED_APPS
. Wenn Sie dies nicht tun, findet collectstatic zuerst die admin base.css und Ihre angepasste Version überschreibt sie nicht.Wenn Sie einen globalen Bereich möchten und nicht über das Überschreiben von Vorlagen nachdenken möchten, eignet sich ein Mixin sehr gut dafür. Geben Sie diesen Code ein, wo immer Sie möchten:
class CSSAdminMixin(object): class Media: css = { 'all': ('css/admin.css',), }
Erstellen Sie dann eine CSS-Datei, die
admin.css
mit Ihren Überschreibungen aufgerufen wird , zum Beispiel:select[multiple] { resize: vertical; }
Dann tun Sie in jedem Modell Folgendes:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
Und du bist fertig.
quelle
Haben Sie
admin/css/changelists.css
in einem Ordner inSTATICFILES_DIRS
, und es wird Benutzer, dass changelists.css anstelle der Standard-Administrator.quelle