2012-04-09 13 views
7

Ich habe folgende django URL:Django URLs passende nicht mit GET-Variablen

url(r'^companies/$', 'companies', name='companies'), 

Wenn ich http://localhost:8000/companies/ gehen, um es perfekt funktioniert. Allerdings, wenn ich versuchen Sie, alle GET-Variablen an die URL django wirft ein 404. Zum Beispiel, wenn ich zu http://localhost:8000/companies/?c=1 django gehen wirft ein 404. Was seltsam ist, ist, dass auf dem 404 heißt es:

Die aktuelle URL , companies/, stimmte mit keinem von diesen überein.

Warum kann ich GET-Variablen nicht an meine URLs übergeben?

Ich benutze Django 1.4.

Die Unternehmen sehen ist definiert wie:

def companies(request): 

Es sollte keine zusätzlichen Parameter nicht akzeptieren müssen, weil sie GET-Variablen sind, URL nicht Parameters- korrekt? Ich schwöre, ich habe das hunderte Male gemacht und es funktioniert immer einfach ...

+0

Vielleicht akzeptiert Ihre "Firmen" -Funktion keine Parameter? Zeigen Sie es Unterschrift, bitte –

+0

zu Frage hinzugefügt. Just 'def Firmen (Anfrage):' – dgel

Antwort

7

Okay. Herausgefunden, was dieses sehr seltsame Verhalten verursacht hat. Ich habe einen benutzerdefinierten Kontextprozessor, der resolve(request.get_full_path()) aufruft. Anscheinend verursacht das eine 404, wenn GET-Variablen in der URL vorhanden sind. Sehr eigenartig.

+0

Wo 'resolve' ist von' django.core.urlresolvers' – dgel

+2

Anscheinend ist dies ein bekanntes [Problem] (https://code.djangoproject.com/ticket/13855). 'resolve (request.path)' funktioniert und behebt die 404's. – dgel

+2

Es ist überhaupt nicht seltsam. 'request.get_full_path()' gibt den URL-Pfad * plus * die Abfragezeichenfolge zurück. "Resolve" erwartet jedoch nur einen einfachen URL-Pfad und versucht daher, ein URL-Muster zu finden, das mit der Zeichenfolge übereinstimmt, die Sie * einschließlich * der Abfragezeichenfolge übergeben haben. Offensichtlich gibt es kein solches URL-Muster, daher erhalten Sie einen 404. Wie Sie festgestellt haben, müssen Sie 'request.path' verwenden, da die Abfragezeichenfolge nicht enthalten ist. –