2016-06-04 10 views
0

Ich mache gerade verschiedene Django-Tutorials durch, um zu verstehen, wie das URL-Mapping funktioniert. Ich kam in einem Beispiel, das so etwas wie dieseKann ich nicht verstehen, warum dieses URL-Mapping funktioniert?

ist dies in meinem urls.py ist

url(r'admin_page_edit$',"adminApp.views.showClientDetails",name="admin_page_edit"), 

das ist in meiner HTML-Seite, die derzeit den Benutzer angezeigt wird

<a href="{% url "admin_page_edit" %}?uname=SomeVal&par2=value" > 

Jetzt die URL, die der Browser beim Klicken auf den obigen href-Link anzeigt. Kein Problem dort

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

Und die oben genannte URL landet in der entsprechenden Ansicht

adminApp.views.showClientDetails 

Jetzt ist hier die proble, scheint dies für alle Arbeiten, aber ich bin verwirrt, warum dies funktioniert? da die URL des Browsers ist

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

, die nicht den Regex-String in der URL überein

admin_page_edit$ 

(Die obige regex bedeutet, wenn die Zeichenfolge mit admin_page_edit enden), aber die URL-Zeichenfolge nicht zu Ende mit admin_page_edit stattdessen ist es

http://127.0.0.1:8000/admin_page_edit?uname=SomeVal&par2=value 

somit mit par2=value

endend

Meine Frage ist, warum trifft dies die entsprechende Definition in der Ansicht, wenn die URL-Regex nicht übereinstimmt?

+0

Die zugegriffen werden? bedeutet normalerweise, was folgt, werden Werte sein. Die Seite endet vor dem? und was folgt, sind die Werte, die an die POST-Methode für diese Seite gesendet werden. – AK47

+0

Die Zuordnung wird auf den Pfad der URL abgebildet, in Ihrem Fall ist dies "/ admin_page_edit", was übereinstimmt. Der '? ...' Teil einer URL ist die [query] (https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax) (** not ** POST data btw). –

Antwort

2

Abfragezeichenfolgen (Teile, die auf ? folgen) werden vom Django-URL-Parser nicht verarbeitet. Warum? Weil sie nicht verarbeitet werden müssen. Sie können jede beliebige Abfragezeichenfolge an jede URL anhängen:

Wie: https://www.facebook.com/?request=pleasedonotwork, die alle gleich funktioniert. Sofern Weiterleitungen (oder einige Protokollierung) basierend auf Abfragen in URLs erfolgt sind, können Sie die Abfrage Teil der URLs als passiv betrachten.

Diese Abfrage-Strings können in Ihrem Django Ansichten über die request.GETQueryDict

Verwandte Themen