No pude encontrar una sola respuesta o una sección en los documentos oficiales de Django que tuviera toda la información que necesitaba para anular / extender las plantillas de administración predeterminadas, así que escribo esta respuesta como una guía completa, con la esperanza de que sea útil para otros en el futuro.
En mysite/admin.py
, cree una subclase de AdminSite
:
from django.contrib.admin import AdminSite
class CustomAdminSite(AdminSite):
# set values for `site_header`, `site_title`, `index_title` etc.
site_header = 'Custom Admin Site'
...
# extend / override admin views, such as `index()`
def index(self, request, extra_context=None):
extra_context = extra_context or {}
# do whatever you want to do and save the values in `extra_context`
extra_context['world'] = 'Earth'
return super(CustomAdminSite, self).index(request, extra_context)
custom_admin_site = CustomAdminSite()
Asegúrese de importar custom_admin_site
en admin.py
sus aplicaciones y registre sus modelos para mostrarlas en su sitio de administración personalizado (si lo desea).
En mysite/apps.py
, crear una sub-clase de AdminConfig
y conjunto default_site
a admin.CustomAdminSite
partir de la etapa anterior:
from django.contrib.admin.apps import AdminConfig
class CustomAdminConfig(AdminConfig):
default_site = 'admin.CustomAdminSite'
En mysite/settings.py
, vuelva a colocar django.admin.site
en INSTALLED_APPS
la apps.CustomAdminConfig
(el administrador de configuración personalizada aplicación del paso anterior).
En mysite/urls.py
, reemplace admin.site.urls
de la URL del administrador acustom_admin_site.urls
from .admin import custom_admin_site
urlpatterns = [
...
path('admin/', custom_admin_site.urls),
# for Django 1.x versions: url(r'^admin/', include(custom_admin_site.urls)),
...
]
Cree la plantilla que desea modificar en su templates
directorio, manteniendo la estructura predeterminada del directorio de plantillas de administración de Django como se especifica en los documentos . Por ejemplo, si estaba modificando admin/index.html
, cree el archivo templates/admin/index.html
.
Todas las plantillas existentes se pueden modificar de esta manera, y sus nombres y estructuras se pueden encontrar en el código fuente de Django .
Ahora puede anular la plantilla escribiéndola desde cero o extenderla y luego anular / extender bloques específicos.
Por ejemplo, si desea mantener todo tal como está pero desea anular el content
bloqueo (que en la página de índice enumera las aplicaciones y sus modelos que registró), agregue lo siguiente a templates/admin/index.html
:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{% endblock %}
Para preservar el contenido original de un bloque, agregue {{ block.super }}
donde quiera que se muestre el contenido original:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{{ block.super }}
{% endblock %}
También puede agregar estilos y scripts personalizados modificando los bloques extrastyle
y extrahead
.