Não consegui encontrar uma única resposta ou uma seção nos documentos oficiais do Django que tinham todas as informações necessárias para substituir / estender os modelos de administrador padrão. Por isso, estou escrevendo essa resposta como um guia completo, esperando que seja útil para outros no futuro.
Em mysite/admin.py
, crie uma subclasse 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()
Certifique-se de importar custom_admin_site
os admin.py
aplicativos e registrar seus modelos nele para exibi-los em seu site de administração personalizado (se desejar).
Em mysite/apps.py
, crie uma subclasse de AdminConfig
e defina default_site
para admin.CustomAdminSite
a etapa anterior:
from django.contrib.admin.apps import AdminConfig
class CustomAdminConfig(AdminConfig):
default_site = 'admin.CustomAdminSite'
Em mysite/settings.py
, substituir django.admin.site
em INSTALLED_APPS
com apps.CustomAdminConfig
(o administrador personalizado aplicativo de configuração da etapa anterior).
Em mysite/urls.py
, substitua admin.site.urls
do URL do administrador paracustom_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)),
...
]
Crie o modelo que você deseja modificar em seu templates
diretório, mantendo a estrutura de diretório padrão dos modelos de administração do Django, conforme especificado nos documentos . Por exemplo, se você estava modificando admin/index.html
, crie o arquivotemplates/admin/index.html
.
Todos os modelos existentes podem ser modificados dessa maneira, e seus nomes e estruturas podem ser encontrados no código fonte do Django .
Agora você pode substituir o modelo escrevendo-o do zero ou estendendo-o e, em seguida, substituindo / estendendo blocos específicos.
Por exemplo, se você deseja manter tudo como está, mas deseja substituir o content
bloco (que na página de índice lista os aplicativos e seus modelos registrados), adicione o seguinte a templates/admin/index.html
:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{% endblock %}
Para preservar o conteúdo original de um bloco, adicione {{ block.super }}
onde quiser que o conteúdo original seja exibido:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{{ block.super }}
{% endblock %}
Você também pode adicionar estilos e scripts personalizados, modificando os blocos extrastyle
e extrahead
.