2012-07-02 13 views
6

Estoy usando django 1.4 y Python 2.7.Nueva URL en admin django independiente de las aplicaciones

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

Básicamente, la URL completa debe ser algo así como admin/my_url.

ACTUALIZACIÓN

Quiero un camino después de que puedo, así revertir asignar la dirección URL utilizando administrador.

Respuesta

5

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

Adición de una dirección 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" admin el sitio se crea una instancia como "django.contrib.admin.site" (y luego, por ejemplo, los de su ModelAdmin están registrados contra eso). Por lo que puede subclase AdminSite para su propio MyAdminSite y volver a definir get_urls() existe:

from django.contrib.admin import AdminSite 

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


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

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

En cuanto a los contenidos reales de get_urls (), vea 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 la práctica envoltura "admin_view" mencionada allí.

PD: En teoría, también podría simplemente definir get_urls() y luego paterizar el sitio de administración predeterminado para que use su get_urls(), pero no sé si realmente funcionaría, probablemente tenga que monkeypatch justo después de su "primera" importación ...

+0

Lo siento por el uso incorrecto de las palabras. De hecho, yo quería esto. Pero, ¿podría darnos un resumen de los pasos necesarios para hacer esto? ¿O un ejemplo donde esto se ha hecho? –

1

Simplemente ponga su asignación url deseada antes de la asignación de administrador en su raíz urls.py. Se tomará la primera coincidencia para la solicitud, ya que django aplica las asignaciones de url de arriba a abajo. Solo recuerde que no usa una URL que el administrador normalmente necesita o proporciona porque esto nunca coincidirá con un mapeo personalizado frente a ella. HTH!

+0

Esa es una posible solución. Sin embargo, no registra la URL como URL de administrador (como en el caso de las URL de modelo). Esta es otra URL de mi sitio que defino y la publico antes de las propias URL de Django. Quiero un camino después del cual también puedo invertir el mapa de la URL usando admin. –