Quiero cambiar ciertos css en el admin de django como base.css. Es mejor cambiar directamente en el django de la biblioteca? ¿Cómo puedo reemplazar de la mejor manera?

7 Comentarios

  1. 92

    Depende mucho de lo que quieres hacer. Aunque primero de todo: ¿no se sobrescribirá en el Django admin directamente. Tienes dos opciones creo que son razonables:

    1. Si usted desea cambiar la apariencia de la administración en general, usted debe reemplazar las plantillas de administración. Esto está cubierto en detalles aquí: Reemplazar las plantillas de administración de. A veces usted sólo puede extender el original de administración de archivo y, a continuación, sobrescribir un bloque como {% block extrastyle %}{% endblock %} en django/contrib/admin/templates/admin/base.html como un ejemplo.
    2. Si tu estilo es un modelo específico puede añadir estilos a través de la Media meta de la clase en su admin.py. Ver un ejemplo aquí:
    class MyModelAdmin(admin.ModelAdmin):
        class Media:
            js = ('js/admin/my_own_admin.js',)    
            css = {
                 'all': ('css/admin/my_own_admin.css',)
            }
    • En realidad, no es el nivel de modelo pero todo el sitio en sí. Para ser específicos, cambios en la base.css,es decir,.css etc. Una opción es incluir el admin/base.html en mi propia aplicación y uso mi base personalizada.css en el admin/base.html archivo. De esa manera voy a tener que incluir algunos de los archivos de plantilla de la django admin para mi propio sitio web. ¿Hay alguna solución mejor que esto ?
    • Ninguno soy consciente de. El django admin es en el fondo nada más que una django reutilizables de la aplicación. Esa es la manera de ir con cualquier otro reutilizables app así.
    • Noto que hay una .archivo css que aparecen en la js aquí… ¿realmente funcionan? Que yo no pueda hacerlo.
    • Sí, estás en lo correcto. Yo cometí un error y editado mi respuesta con un ejemplo de la django docs.
  2. 25

    Me acaba de prolongar admin/base.html para incluir una referencia a mi propio archivo css – al final. La belleza de css es que usted no tiene que tocar las definiciones existentes, acabo de volver a definir.

  3. 21

    Esta solución va a trabajar para la administración del sitio, creo que es la forma más limpia porque anula base_site.html que no cambia cuando la actualización de django.

    Crear en el directorio de plantillas de una carpeta llamada admin en que se cree un archivo denominado base_site.html.

    Crear en el directorio estático bajo css un archivo llamado admin-extra.css .

    Escribe en él todas las css personalizado que usted desea para su formas como: body{background: #000;}.

    Pegar esto en el 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 ha mencionado en los comentarios:
    asegúrese de que su aplicación es antes de la administración de la aplicación en INSTALLED_APPS, de lo contrario su plantilla no reemplazar django del

    Que Es! estás hecho

    • Gracias, funciona muy bien! Si no funciona, asegúrese de que su aplicación es antes de la administración de la aplicación en INSTALLED_APPS, de lo contrario su plantilla no reemplazar django es.
    • Mejor respuesta y comentario. Es sorprendente lo difícil que es cambiar el color sobre la página de administración. Ir a través de esta respuesta y el comentario que hizo solidificar cómo funciona.
  4. 19
    • En settings.py, asegúrese de que su aplicación esté lista antes de admin en el INSTALLED_APPS.
    • Crear (your-app)/templates/admin/base_site.html y poner el <style> bloque en el {% block extrahead %}

    Ejemplo:

    {% extends "admin/base_site.html" %}
    {% block extrahead %}
        <style>
            .field-__str__ {
                font-family: Consolas, monospace;
            }
        </style>
    {% endblock %}
    • Mejor respuesta. Si lo desea, también puede evitar a la lista de su aplicación antes de admin en INSTALLED_APPS por poner una «plantilla» directorio en el proyecto de base y que hace referencia a él en settings.py: PLANTILLAS = [ …otras materias…, ‘DIRECTORIOS’: [os.ruta de acceso.join(BASE_DIR, «plantillas»)], ]
  5. 14

    En su directorio estático, crear un static/admin/css/base.css archivo.

    Pegar en Django por defecto del Administrador de CSS en primer lugar, a continuación, agregue las personalizaciones en la parte inferior.

    • Si usted hace esto, asegúrese de poner su aplicación ANTES de django.contrib.admin en la lista de INSTALLED_APPS. Si no, collectstatic se encuentra el administrador de la base.css primera y su versión personalizada no se sobrescribirá.
    • Esto no es una buena solución a largo plazo. Se copia/pega un montón de código y no va a ser mantenido como Django actualizaciones.
    • Cualquier estilo a la de Django admin es básicamente una bifurcación del código. Una actualización a Django podría, en efecto, romper sus personalizaciones. Mi recomendación es mantener las personalizaciones al mínimo y agregar en la parte inferior de Django por defecto del estilo. A continuación, puede actualizar manualmente el estilo predeterminado si quiere y cuando quiere.
    • respuesta de arriba es mejor; mantiene las cosas «SECO», pero aún así es un tenedor de Django del código que podría conducir a menores de actualización de los dolores.
  6. 6

    Si quieres un alcance global y que no quieren pensar acerca de cómo reemplazar las plantillas de un mixin funciona muy bien para esto. Poner este código donde quieras: en

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

    A continuación, hacer un archivo CSS llamado admin.css con sus modificaciones, por ejemplo:

    select[multiple] {
        resize: vertical;
    }

    Entonces, en cualquiera de los modelos que quieres, hacer:

    class MyModelAdmin(admin.ModelAdmin, CSSAdminMixin):

    Y estará todo listo.

    • Me gusta tu respuesta, pero ¿por qué no añadir directamente a MyModelAdmin
    • Usted podría hacer eso si es una modelo, pero va a ser desordenado, si no a muchos de los modelos.
  7. 4

    Han admin/css/changelists.css dentro de una carpeta en STATICFILES_DIRS, y el usuario que changelists.css en lugar de la predeterminada admin uno.

Dejar respuesta

Please enter your comment!
Please enter your name here