it-swarm.it

Sovrascrivere admin css in django

Voglio cambiare alcuni css in admin Django come base.css. È meglio cambiare direttamente nella libreria Django? Come posso sovrascriverlo nella miglior modo?

62
rajan sthapit

Dipende molto da quello che vuoi fare. Anche se prima di tutto: non sovrascriverlo nel Django admin direttamente. Hai due opzioni che penso siano ragionevoli:

  1. Se si desidera modificare l'aspetto dell'amministratore in generale, è necessario sostituire i modelli di amministratore. Questo è trattato in dettaglio qui: Sostituzione dei modelli di amministrazione . A volte puoi semplicemente estendere il file admin originale e quindi sovrascrivere un blocco come {% block extrastyle %}{% endblock %} nel Django/contrib/admin/templates/admin/base.html come esempio.
  2. Se il tuo stile è specifico del modello, puoi aggiungere altri stili tramite la meta classe Media nella tua admin.py. Vedi un esempio qui:
class MyModelAdmin(admin.ModelAdmin):
    class Media:
        js = ('js/admin/my_own_admin.js',)    
        css = {
             'all': ('css/admin/my_own_admin.css',)
        }
92

Ho appena esteso admin/base.html per includere un riferimento al mio file CSS - alla fine. Il bello del CSS è che non devi toccare le definizioni esistenti, ma semplicemente ridefinirle.

25
Danny W. Adair

Questa soluzione funzionerà per il sito di amministrazione, penso che sia il modo più pulito perché sostituisce base_site.html che non cambia durante l'aggiornamento di Django.

Crea nella tua cartella dei modelli una cartella chiamata admin in essa crea un file chiamato base_site.html.

Crea nella tua directory statica sotto css un file chiamato admin-extra.css.

Scrivi in ​​esso tutti i CSS personalizzati che desideri per i tuoi moduli come: body{background: #000;}.

Incolla questo nel 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 %}

Questo è tutto! hai finito

19
elad silver
  • Nel settings.py, assicurati che la tua app sia elencata prima dell'amministratore nel INSTALLED_APPS.
  • Creare (your-app)/templates/admin/base_site.html e inserisci <style> blocco nel {% block extrahead %}

Esempio:

{% extends "admin/base_site.html" %}
{% block extrahead %}
    <style>
        .field-__str__ {
            font-family: Consolas, monospace;
        }
    </style>
{% endblock %}
17
tivnet

Nella tua directory statica, crea un static/admin/css/base.css file.

Incolla prima CSS amministratore predefinito di Django , quindi aggiungi le personalizzazioni in fondo.

14
Ryan Allen

Se vuoi un ambito globale e non vuoi pensare a scavalcare i template, un mixin funziona davvero bene per questo. Inserisci questo codice dove vuoi:

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

Quindi, crea un file CSS chiamato admin.css con le tue sostituzioni, ad esempio:

select[multiple] {
    resize: vertical;
}

Quindi, in qualunque modello tu voglia, fai:

class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):

E sarai pronto.

6
mlissner

Forse grappelli ti risparmierà il fastidio ...
http://grappelliproject.com/

Vecchio e obsoleto ...
https://lincolnloop.com/blog/customizing-Django-admin-eurodjangocon-2009/

4
John Mee

Avere admin/css/changelists.css all'interno di una cartella in STATICFILES_DIRS e userà changelists.css invece di quello predefinito di amministrazione.

4
timkofu