2012-08-22 9 views
6

Ich versuche, einige Django URL-Anpassung zu tun.Django URLs, mit einem? in der URL

ich will ein paar URLs, wo ich http://mysite.com/base?sort=type1/, http://mysite.com/base?sort=type2/ usw.

Ich kann nicht herausfinden, wie diese Ausdrücke URL übereinstimmen: Ich bin sehr neu für Django und nie Reg Ex zuvor.

Was ich für urls.py in meiner „Basis“ habe Anwendung:

url(r'^$','base.views.main, name='main'), 

ich nicht herausfinden kann, was zu setzen, um meine Urls mit Fragezeichen zu entsprechen.

Ich versuche, so etwas wie

url(r'^?sort=popular/$', 'base.views.main_popular', name='main_popular'), 

Dank für die Hilfe!

Antwort

6

? passt nicht zu einem "?" in der URL, stattdessen hat es seine eigene Bedeutung, die Sie es hier nachschlagen können:
Python Regular Expressions Wenn Sie das genaue Zeichen von "?" Innerhalb deiner URL musst du ihr irgendwie entkommen (weil sie eine Bedeutung in RegExs hat), also möchtest du sie vielleicht mit einem "\" (Backslash) so abbrechen, dass du schreiben würdest?

EDIT:
okay, so mit dem, was Sie in den Kommentaren gesagt haben, hier scheint Ihr Problem tritt main?sort=popular auf dem uRL-Muster, wenn Sie die Vorlage für /main/ mit dem GET Methode Wörterbuch Argumente von sort=popular rendern, schreiben Sie einfach eine Funktion, die zwischen unterscheidet GET und POST, im GET Teil, haben Sie wie sort_by = request.GET.get('sort','') und sortieren Sie dann entsprechend mit dem Wert von sort_by Variable, wäre wie:

def main_handler(request): 
    if request.method == "POST": 
      whatever ... 
    if request.method == "GET" : 
      sort_by = request.GET.get('sort','') 
      if sort_by: 
       sort by what sort points to 
       return "the sorted template" 
    return render_to_response(the page and it's args) 

und loslassen? innerhalb des URL-Musters, das hinzugefügt wird, wenn Sie eine Seite mit einem GET-Argument anfordern.

+0

Ich versuchte, dies zu tun, leider hat es nicht wirklich funktioniert - ich bin mir nicht ganz sicher, warum. – deakolt

+0

möchtest du vielleicht auch diesen Code posten? aber wirklich, es scheint so komisch, ein Fragezeichen am Anfang einer solchen URL zu haben (sort = popular) – SpiXel

+0

Nun im Wesentlichen habe ich eine Webseite, mit Inhalten, die basierend auf der Art sortiert werden können. main? sort = popular bedeutet, dass Sie immer noch auf der Hauptseite sind, vs. main/popular/was eine andere Seite impliziert. Ich benutzte URL (r '^ \? Sort = beliebt/$', 'base.views.main_popular', name = 'main_popular') – deakolt

7

Sie passen diese nicht an die Regex an. Die Elemente nach der ? sind nicht Teil der URL, sie sind Abfrageparameter, auf die von Ihrer Sicht über request.GET zugegriffen werden kann.

+0

Ahh Ich bin so ein Nub Web-Programmierung, danke-- – deakolt