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?
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?
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 %}en django/contrib/admin/templates/admin/base.htmlun ejemplo.Mediametaclase en su admin.py. Vea un ejemplo aquí:
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = ('js/admin/my_own_admin.js',)
css = {
'all': ('css/admin/my_own_admin.css',)
}
settings.py, asegúrese de que su aplicación aparezca antes que admin en el archivo INSTALLED_APPS.(your-app)/templates/admin/base_site.htmly 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 %}
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.
Esta solución funcionará para el sitio de administración, creo que es la forma más limpia porque anula base_site.htmllo que no cambia al actualizar django.
Cree en su directorio de plantillas una carpeta llamada adminen ella cree un archivo llamado base_site.html.
Cree en su directorio estático en cssun archivo llamado admin-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
INSTALLED_APPS, de lo contrario, su plantilla no anula la de django.
base_site.htmleso 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.cssarchivo.
Pegue primero el CSS de administrador predeterminado de Django , luego agregue sus personalizaciones en la parte inferior.
django.contrib.adminen la lista de INSTALLED_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.csscon sus anulaciones, por ejemplo:
select[multiple] {
resize: vertical;
}
Luego, en los modelos que desee, haga:
class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):
Y estará todo listo.
Tenga admin/css/changelists.cssdentro una carpeta adentro STATICFILES_DIRS, y usará ese changelists.css en lugar del administrador predeterminado.