No outro dia, luto com o django. UAU. Preciso de um painel rápido, nem todas as listas de aplicativos. Eu costumo usar terno de django para meus projetos e isso é realmente incrível. Então faça uma nova administração, não. O administrador principal faz o que eu preciso, mas quero apenas um painel personalizado. Aplicar alguns aplicativos malucos para modificar meu painel principal, não, eu quero controle total para inserir eu quero. Então, depois de muito patch, tente, erro, faça alguma coisa. O que eu fiz foi uma subclasse simples de AdminSite, sobrescrever get_urls e colocar minha visão de índice customizada nele.
Então criei um aplicativo chamado plus. Lá foram inseridos dois arquivos, sites.py e views.py. Em sites fiz isso:
#sites.py
from django.contrib.admin.sites import AdminSite
class AdminMixin(object):
"""Mixin for AdminSite to allow custom dashboard views."""
def __init__(self, *args, **kwargs):
return super(AdminMixin, self).__init__(*args, **kwargs)
def get_urls(self):
"""Add our dashboard view to the admin urlconf. Deleted the default index."""
from django.conf.urls import patterns, url
from views import DashboardWelcomeView
urls = super(AdminMixin, self).get_urls()
del urls[0]
custom_url = patterns('',
url(r'^$', self.admin_view(DashboardWelcomeView.as_view()),
name="index")
)
return custom_url + urls
class SitePlus(AdminMixin, AdminSite):
"""
A Django AdminSite with the AdminMixin to allow registering custom
dashboard view.
"""
#views.py
from django.views.generic import TemplateView
class DashboardWelcomeView(TemplateView):
template_name = 'admin/dashboard/welcome.html'
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context=context)
Agora, nossa classe para substituição de urls está pronta. Vamos fazer acontecer.
#urls.py
from django.contrib import admin
from websublime.contrib.manager.plus.sites import SitePlus
admin.site = SitePlus()
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
O site de administração leva nossa nova classe para resolver nossa visão personalizada. Fiz um TemplateView, mas depende de você se quiser um índice de auto () ou uma visualização personalizada.
Então, onde está minha nova visualização do painel. Como eu disse, se você usar django-suit para template você terá um menu à esquerda para seu aplicativo e agora um espaço customizado para seu painel. E é isso.