Ya no tienes que investigar más por internet ya que llegaste al lugar exacto, contamos con la solución que buscas y sin complicaciones.
Solución:
Tienes 3 opciones aquí:
Uso de paquetes de terceros que proporcionan menú
Esto es bastante sencillo, hay algunos buenos paquetes que admiten el menú para el administrador y alguna forma de agregar su elemento al menú.
Un ejemplo de un paquete de terceros sería django-admin-tools
. El inconveniente es que es un poco difícil de aprender. Otra opción sería usar django-adminplus
pero al momento de escribir esto, no es compatible con Django 2.2.
Hackear con plantillas de administración de django
Siempre puede ampliar las plantillas de administración y anular las partes que desee, como se menciona en la respuesta de @Sardorbek, puede copiar algunas partes de la plantilla de administración y cambiarlas de la forma que desee.
Uso del sitio de administración personalizado
Si se supone que sus vistas solo actúan en el sitio de administración, entonces puede extender el sitio de administración (y tal vez cambiar el valor predeterminado), además de agregar enlaces a la plantilla, debe usar este método para definir sus vistas solo de administrador, ya que es más fácil de verificar permisos de esta manera.
Teniendo en cuenta que ya extendió su sitio de administración, ahora puede usar los métodos anteriores para agregar su enlace a la plantilla, o incluso extender get_app_list
método, ejemplo:
class MyAdminSite(admin.AdminSite):
def get_app_list(self, request):
app_list = super().get_app_list(request)
app_list += [
"name": "My Custom App",
"app_label": "my_test_app",
# "app_url": "/admin/test_view",
"models": [
"name": "tcptraceroute",
"object_name": "tcptraceroute",
"admin_url": "/admin/test_view",
"view_only": True,
],
]
return app_list
También puede verificar si el usuario actual del personal puede acceder al módulo antes de mostrarles los enlaces. Se verá así al final:
Problema aquí que su div
no está dentro main-content
. sugiero extender admin/index.html
Meter en app/templates/admin/index.html
% extends "admin/index.html" %
% load i18n static %
% block content %
% if app_list %
% for app in app_list %
app.name
% for model in app.models %
% if model.admin_url %
model.name
% else %
model.name
% endif %
% if model.add_url %
% trans 'Add' %
% else %
% endif %
% if model.admin_url %
% if model.view_only %
% trans 'View' %
% else %
% trans 'Change' %
% endif %
% else %
% endif %
% endfor %
% endfor %
....
% else %
% trans "You don't have permission to view or edit anything." %
% endif %
% endblock %
El otro enfoque es agregar una aplicación personalizada a app_list
. Pero es mucho más feo. Así que sugiero anular la plantilla.
Supongo que estás sobreescribiendo get_urls
en AdminSite
.