2012-07-02 19 views
6

Ich benutze Django 1.4 und Python 2.7.Neue URL auf Django Admin unabhängig von den Anwendungen

Ich habe nur eine einfache Anforderung, wo ich eine neue URL zur Django Admin App hinzufügen muss. Ich weiß, wie ich URLs hinzufügen kann, die für die benutzerdefinierten Apps gedacht sind, kann aber nicht herausfinden, wie URLs der Admin-App hinzugefügt werden. Bitte führe mich durch das.

Grundsätzlich sollte die vollständige URL so etwas wie admin/my_url sein.

UPDATE

möchte ich einen Weg nach dem ich auch die URL Reverse Karte Admin verwenden.

Antwort

5

+1 für Jingos Antwort auf Ihre ursprüngliche Frage. Mit Ihrem klärenden Kommentar zu der Antwort im Hinterkopf: Eine solche URL ist nicht "unabhängig von den Apps", es ist eine URL für die App "admin".

eine URL zur Admin-Seite ist zu Modeladmin ähnlich Hinzufügen von get_urls() überschreiben: 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

ist ein Admin-Seite, die standardmäßig "um die" admin Die Site wird als "django.contrib.admin.site" instanziiert (und dann sind zB Ihre ModelAdmins dafür registriert). So können Sie Adminsite für die eigene MyAdminSite Unterklasse und neu definieren get_urls() gibt:

from django.contrib.admin import AdminSite 

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


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

Stellen Sie sicher, my_admin_site in urls.py verwenden stattdessen jetzt: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf

den tatsächlichen Inhalt von get_urls In Bezug auf (), siehe https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls (natürlich Aufruf von super() von MyAdminSite). Beachten Sie auch den praktischen Wrapper "admin_view", der dort erwähnt wird.

PS: In der Theorie könnten Sie auch einfach get_urls() definieren und dann die Standard-Admin-Site so anpassen, dass sie Ihre get_urls() verwendet, aber ich weiß nicht, ob das tatsächlich funktionieren würde - Sie müssten wahrscheinlich Monkeypatch gleich nach seinem "ersten" Import ...

+0

Es tut mir leid für die falsche Verwendung von Wörtern. Ich wollte das wirklich. Aber könnten Sie bitte kurz erläutern, welche Schritte dazu erforderlich sind? Oder ein Beispiel, wo dies gemacht wurde? –

1

Setzen Sie einfach Ihre gewünschte URL Mapping vor dem Admin Mapping in Ihrem root urls.py. Die erste Übereinstimmung für die Anfrage wird genommen, weil django die URL-Mappings von oben nach unten durchführt. Denken Sie daran, dass Sie keine URL verwenden, die der Administrator normalerweise benötigt oder zur Verfügung stellt, da diese niemals mit einer benutzerdefinierten Zuordnung davor übereinstimmt. HTH!

+0

Das ist eine mögliche Lösung. Aber es registriert die URL nicht als Admin-URL (wie bei Modell-URLs). Dies ist eine weitere URL meiner Website, die ich vor den eigenen URLs von Django definiere und diene. Ich möchte einen Weg, nach dem ich auch die URL mit Admin remote zuordnen kann. –