2009-06-05 4 views
1

übereinstimmen. Ich möchte, dass die WHOLE-URL nach dem Schrägstrich an ein Skript übergeben wird. Wenn ich das tue:Abfrageparameter erzwingen, die in urls.py

url(r'^(?P<id>.*)$', alias.get, name="alias"), 

Dann bekomme ich den Pfad Komponente nur und nicht die Abfrageparameter meiner Funktion übergeben. Ich habe dann zu:

 
def urlencode(dict) : 
    if len(dict) == 0 : return "" 
    params = {} 
    for k, v in dict.items() : 
     params[k] = v.encode('utf-8') 

    return "?" + urllib.urlencode(params) 

def get(id) : 
    id += urlencode(request.GET) 

ich dies für viele meiner Ansichten tue und ich vergesse immer wieder, sie und die Schaffung von Bugs. Gibt es eine Möglichkeit, meinem urls.py mitzuteilen, dass alles einschließlich der Abfragezeichenfolge übereinstimmt?

Antwort

1

Nein, es gibt keine Möglichkeit, das zu tun. Die GET-Parameter werden nicht an urls.py übergeben.

Ich frage mich, warum Sie dies tun müssen, obwohl. Warum hängen so viele Ihrer Ansichten von GET Querystrings ab? Warum benutzt du nicht die Django-Methode, um die Parameter in die URL selbst zu übernehmen, anstatt als Querystrings?

+0

Meine URLs sehen so aus: 'http: //example.com/alias/http: // stackoverflow.com/users/90025/paul-tarjan'. Das heißt, jemand anders postet in ihrer URL am Ende von mir. Oftmals hat die Posted-in-URL Suchmuster, die ich auch als Teil des "Alias" erfassen möchte. –

3

In Ihrer Ansicht können Sie die URL einschließlich der Abfragezeichenfolge mit request.get_full_path() abrufen.

Es gibt auch request.build_absolute_uri(), wenn Sie den http://servername.com Teil einschließen möchten.