Ein echtes Beispiel für URL-Namespace
Studiere ich die Django-Dokumentation, aber stieß ich auf ein Teil, dass ich nicht verstehen kann: was ist ein echtes Beispiel dafür, wie verwenden Sie einen namespace in einem echten problem. Ich weiß, die syntax, aber ich weiß nicht der Zweck dieses.
InformationsquelleAutor der Frage Harold Finch | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Üblicherweise werden Sie zu jeder Anwendung die URLs in Ihrem eigenen namespace. Dies verhindert, dass die
reverse()
Django-Funktion und die{% url %}
template-Funktion wieder die falsche URL da die URL-pattern-name passiert Entsprechung in einer anderen app.Was ich in meiner Projekt-Ebene
urls.py
Datei ist der folgende:Hinweis: der Letzte Abschnitt: das geht über die Anwendungen, die ich installiert habe (
settings.LOCAL_APPS
ist eine Einstellung, die ich Hinzugefügt, die enthält nur meine apps, und es wird HinzugefügtINSTALLED_APPS
andere Dinge wie Süd), sucht einenurls.py
in jedem von Ihnen, und importiert diese URLs in einem namespace mit dem Namen " nach der app, und setzt auch diese URLs in einer URL ein Unterverzeichnis mit dem Namen nach der app.So, zum Beispiel, wenn ich eine app namens
hosts
undhosts/urls.py
aussieht:Nun meine
views.py
nennen kannreverse("hosts:list")
um die URL zu der Seite, die nennthosts.views.show_hosts
und es wird Aussehen wie"/hosts/"
. Gleiches gilt für{% url "hosts:list" %}
in einer Vorlage. Auf diese Weise habe ich nicht zu befürchten Kollision mit einer URL namens "Liste" in einer anderen app, und ich muss nicht jedes Präfix-Namen mithosts_
.Beachten Sie, dass die login-Seite ist in
{% url "login" %}
da es sich nicht in einem gegebenen namespace.InformationsquelleAutor der Antwort Mike DeSimone
Betrachten Sie ein url-Muster, wie unten
url(r'^login/',include('app_name', name='login'))
Auch der Ansicht, die Sie verwenden eine Drittanbieter-app wie Django-RestFramework.
Wenn Sie die app verwenden, müssen Sie deklarieren Sie die folgende Zeile in URLs conf-Datei des Projekts.
Nun, wenn Sie überprüfen Sie den code von rest-framework, finden Sie den code unten in urls.py Datei
Haben wir 'login' name für ein URL-Muster, die in unserem Projekt und der gleiche name benutzt wird, von Django-rest-framework für eines Ihrer URL-Muster. Wenn Sie reverse('login'), Django verwirrt.
Zur Lösung dieser Art von Problemen, die wir verwenden-namespace.
URL-Namen ein namespace wird nie kollidieren mit anderen Namensräumen.
Ein Namespace URL-Muster kann Umgekehrt werden, verwenden
reverse('namespace:url_name')
InformationsquelleAutor der Antwort nikhil ponnuru