Quiero cambiar ciertos css en admin django como base.css. ¿Es mejor cambiar directamente en la biblioteca de django? ¿Cómo puedo anularlo de la mejor manera?
django
django-admin
rajan sthapit
fuente
fuente
Respuestas:
Depende mucho de lo que quieras hacer. Aunque antes que nada: no lo sobrescriba directamente en el administrador de Django. Tienes dos opciones que creo que son razonables:
{% block extrastyle %}{% endblock %}
endjango/contrib/admin/templates/admin/base.html
un ejemplo.Media
metaclase en suadmin.py
. Vea un ejemplo aquí:fuente
settings.py
, asegúrese de que su aplicación aparezca antes que admin en el archivoINSTALLED_APPS
.(your-app)/templates/admin/base_site.html
y coloque el<style>
bloque en el{% block extrahead %}
Ejemplo:
{% extends "admin/base_site.html" %} {% block extrahead %} <style> .field-__str__ { font-family: Consolas, monospace; } </style> {% endblock %}
fuente
Acabo de extender admin / base.html para incluir una referencia a mi propio archivo css, al final. La belleza de CSS es que no tiene que tocar las definiciones existentes, simplemente redefinir.
fuente
Esta solución funcionará para el sitio de administración, creo que es la forma más limpia porque anula
base_site.html
lo que no cambia al actualizar django.Cree en su directorio de plantillas una carpeta llamada
admin
en ella cree un archivo llamadobase_site.html
.Cree en su directorio estático en
css
un archivo llamadoadmin-extra.css
.Escribe en él todas css la costumbre que desea para sus formas, como:
body{background: #000;}
.Pega esto en
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 %}
Como se menciona en los comentarios: asegúrese de que su aplicación esté antes de la aplicación de administración en INSTALLED_APPS; de lo contrario, su plantilla no anula la de django
¡Eso es! ya terminaste
fuente
INSTALLED_APPS
, de lo contrario, su plantilla no anula la de django.base_site.html
eso nunca cambiará al actualizar django? (Quiero decir, sí, esta respuesta tiene 3 años y todavía funciona, pero eso no está garantizado)En su directorio estático, cree un
static/admin/css/base.css
archivo.Pegue primero el CSS de administrador predeterminado de Django , luego agregue sus personalizaciones en la parte inferior.
fuente
django.contrib.admin
en la lista deINSTALLED_APPS
. Si no lo hace, collectstatic encontrará primero el archivo admin base.css y su versión personalizada no lo sobrescribirá.Si desea un alcance global y no quiere pensar en anular plantillas, un mixin funciona muy bien para esto. Pon este código donde quieras:
class CSSAdminMixin(object): class Media: css = { 'all': ('css/admin.css',), }
Luego, cree un archivo CSS llamado
admin.css
con sus anulaciones, por ejemplo:select[multiple] { resize: vertical; }
Luego, en los modelos que desee, haga:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
Y estará todo listo.
fuente
Tenga
admin/css/changelists.css
dentro una carpeta adentroSTATICFILES_DIRS
, y usará ese changelists.css en lugar del administrador predeterminado.fuente