Python regex mit Fragezeichen, wörtliche
Bin ich mit Django in der URLconf, die URL, die ich erhalten, ist /?code=authenticationcode
Ich möchte, entsprechend die URL mit r'^\?code=(?P<code>.*)$'
, aber es funktioniert nicht.
Dann fand ich heraus, es ist das problem der '?'.
Weil ich versuche /aaa?aaa
mit r'aaa\?aaa'
r'aaa\\?aaa'
auch r'aaa.*aaa'
alle gescheitert, aber es funktioniert, wenn Sie "+" oder jeder andere Charakter.
Wie mit dem '?', ist es etwas besonderes?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund
/aaa?aaa
übereinstimmen, werden nicht innerhalb der URL wird da ein?
beginnt eine neue GET-Abfrage.So, das matchable Teil der URL ist nur bis zum ersten 'aaa'. Die übrigen '?aaa' ist eine neue query-string getrennt durch das '? ' - Zeichen, enthält die variable "aaa" übergeben als GET-parameter.
Was Sie kann tun, hier ist die Kodierung der variable, bevor es seinen Weg in die URL. Die codierte form der
?
ist%3F
.Sollten Sie auch nicht mit einer GET-Abfrage z.B.
/?code=authenticationcode
mit regex überhaupt. Stattdessen passen Sie Ihre URL bis zu/
mitr'^$'
. Django wird übergeben der variablecode
als GET-parameter an dierequest
Objekt, die Sie erhalten können, in Ihren anzeigen mitrequest.GET.get('code')
.Dürfen Sie nicht verwenden
?
in einer URL als variable mit dem Wert. Die?
zeigt an, dass Variablen kommen.Wie:
http://www.example.com?variable=1&another_variable=2
Ersetzen Sie es oder ersetzen Sie es. Hier einige schöne Dokumentation.
Django ' s
urls.py
analysiert keine query-strings, so gibt es keine Möglichkeit, diese Informationen auf derurls.py
Datei.Stattdessen analysieren Sie aus Ihrer Sicht:
"Wie mit dem '?', ist es etwas besonderes?"
Ja, aber Sie sind richtig entweicht es mit dem umgekehrten Schrägstrich ein. Ich sehe nicht, wo Sie haben, entfielen auf die führenden Schrägstrich, obwohl. Dieses bit muss nur Hinzugefügt werden:
unterdrücken die regex-Metazeichen mit
[]
[^?$]
? Die Flucht wäre der bessere Ansatz.