Nueva URL en django admin independiente de las aplicaciones

Estoy usando Django 1.4 y Python 2.7.

Solo tengo un requisito simple en el que tengo que agregar una nueva URL a la aplicación de administración de Django. Sé cómo agregar direcciones URL que son para aplicaciones personalizadas, pero no sé cómo agregar direcciones URL que son de la aplicación de administración. Por favor guíame a través de esto.

Básicamente, la URL completa debería ser algo como admin/my_url.

ACTUALIZACIÓN

Quiero una forma después de la cual también pueda revertir el mapa de la URL usando admin.

preguntado el 02 de julio de 12 a las 06:07

2 Respuestas

+1 para la respuesta de Jingo a su pregunta original. Con su comentario aclaratorio a la respuesta en mente: tal URL es no "independiente de las aplicaciones", es una URL para la aplicación "admin".

Agregar una URL al sitio de administración es similar a ModelAdmin, anulando get_urls(): https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-views-to-admin-sites

EDIT:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.AdminSite

es un sitio de administración, por defecto, "el" sitio de administración se instancia como "django.contrib.admin.site" (y luego, por ejemplo, su ModelAdmin está registrado contra eso). Entonces puede subclasificar AdminSite para su propio MyAdminSite y redefinir get_urls() allí:

from django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
    def get_urls():
        ...


...
my_admin_site = MyAdminSite()
...
my_admin_site.register(MyModel, MyModelAdmin)

Asegúrate de usar my_admin_site en urls.py ahora: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf

Con respecto al contenido real de get_urls(), consulte https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls (por supuesto llamando a super() de MyAdminSite). También tenga en cuenta el conveniente envoltorio "admin_view" mencionado allí.

PD: En teoría, también podría simplemente definir get_urls() y luego aplicar un overpatch al sitio de administración predeterminado para que use su get_urls(), pero no sé si eso realmente funcionaría; "primera" importación...

Respondido 02 Jul 12, 10:07

Lo siento por el mal uso de las palabras. En realidad quería esto. Pero, ¿podría darnos un breve resumen de los pasos necesarios para hacer esto? ¿O un ejemplo donde esto se ha hecho? - Sandip Agarwal

Simplemente coloque el mapeo de URL deseado antes del mapeo de administrador en su raíz urls.py. Se tomará la primera coincidencia para la solicitud, porque django va las asignaciones de URL de arriba hacia abajo. Solo recuerde que no usa una URL que el administrador normalmente necesita o proporciona porque esto nunca coincidirá con un mapeo personalizado al frente. HTH!

Respondido 02 Jul 12, 07:07

Esa es una posible solución. Pero no registra la URL como una URL de administración (como en el caso de las URL modelo). Esta es otra URL de mi sitio que defino y sirvo antes que las propias URL de Django. Quiero una forma después de la cual también pueda revertir el mapa de la URL usando admin. - Sandip Agarwal

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.