2012-07-02 12 views
6

Sto usando django 1.4 e Python 2.7.Nuovo URL su admin di django indipendente dalle app

Ho solo un semplice requisito in cui devo aggiungere un nuovo URL all'app di amministrazione django. So come aggiungere URL che sono per le app personalizzate ma non riesco a capire come aggiungere gli URL che sono dell'app di amministrazione. Per favore guidami attraverso questo.

Fondamentalmente l'URL completo dovrebbe essere qualcosa come admin/my_url.

UPDATE

Voglio un modo dopo di che posso così invertire mappare l'URL utilizzando admin.

risposta

5

+1 per la risposta di Jingo alla domanda originale. Con il tuo commento chiarificatore alla risposta in mente: Tale URL è non "indipendente dalle app", è un URL per l'app "admin".

Aggiunta di un URL per l'amministratore del sito è simile a ModelAdmin, ridefinendo 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

è un amministratore del sito, per impostazione predefinita "il" admin il sito è istanziato come "django.contrib.admin.site" (e quindi ad es. i tuoi ModelAdmin sono registrati contro questo). Così si può creare una sottoclasse AdminSite per il proprio MyAdminSite e ridefinire get_urls() c'è:

from django.contrib.admin import AdminSite 

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


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

Assicurarsi di utilizzare my_admin_site in urls.py invece ora: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf

Per quanto riguarda il contenuto effettivo di get_urls (), vedi https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls (ovviamente chiamando super() di MyAdminSite). Si noti anche il comodo wrapper "admin_view" menzionato qui.

PS: In teoria, puoi anche definire get_urls() e quindi monkeypatch il sito di amministrazione predefinito in modo che utilizzi il tuo get_urls() ma non so se funzionerà - probabilmente dovresti monkeypatch subito dopo la sua "prima" importazione ...

+0

Mi dispiace per l'uso sbagliato delle parole. In realtà volevo questo. Ma, potresti per favore dare una breve descrizione di quali passaggi sono necessari per fare questo? O un esempio in cui questo è stato fatto? –

1

Basta inserire la mappatura URL desiderata prima della mappatura admin nella root urls.py. Verrà eseguita la prima corrispondenza per la richiesta, poiché django esegue i mapping degli URL dall'alto verso il basso. Ricorda che non utilizzi un URL che l'amministratore normalmente ha bisogno o che fornisce perché non corrisponderà mai a una mappatura personalizzata. HTH!

+0

Questa è una possibile soluzione. Ma, non registra l'URL come un URL di amministrazione (come quello nel caso di URL del modello). Questo è un altro URL del mio sito che definisco e lo servo prima degli URL di Django. Voglio un modo dopo il quale posso anche invertire la mappa dell'URL usando admin. –