2016-04-25 8 views
4

Ich bin gespannt, ob jemand eine gute Lösung für die Übergabe unbekannter URL-Argumente in Kolben gefunden hat. Ich denke, dass es eine einfache Lösung geben muss, die ich einfach komplett ausgeblendet habe. Jede Hilfe wird geschätzt.Flask Pass unbekannt Url Argumente in url_for und Weiterleitungen

Lassen Sie uns sagen, ich habe www.example.com?foo=baz&bar=buzz

@app.route('/') 
def index(): 
    foo = request.args.get('foo',None) 
    bar = request.args.get('bar',None) 
    return redirect(url_for('args', foo=foo, bar=bar, _external=True)) 

Was kann ich nicht scheinen, um herauszufinden ist ein guter Weg entlang irgendwelchen unbekannten Argumente zu übergeben. Wenn ich www.example.com?foo=baz&bar=buzz&bing=bang oder www.example.com?this=that auf der gleichen Route komme, muss ich any/and alle Argumente erhalten, um zur nächsten Ansicht weiterzugehen.

+1

Vielleicht wie etwas passieren '** Anfrage .args' (ungetestet), das request.args multidict als Schlüsselwörter übergeben. –

+0

Danke @ Jérôme !! Test Args Scheint zu arbeiten! – Joshraz

+0

Großartig. Ich habe die Antwort mit besseren Erklärungen erläutert. –

Antwort

3

request.args ist ein MultiDict.

Ein MultiDict ist eine Dictionary-Unterklasse, die so angepasst wurde, dass sie mehrere Werte für denselben Schlüssel behandelt, die beispielsweise von den Parsing-Funktionen in den Wrappern verwendet werden. Dies ist erforderlich, da einige HTML-Formularelemente mehrere Werte für denselben Schlüssel übergeben.

MultiDict implementiert alle Standardwörterbuchmethoden. Intern speichert es alle Werte für einen Schlüssel als Liste, aber die standardmäßigen dict-Zugriffsmethoden geben nur den ersten Wert für einen Schlüssel zurück.

Sie Unter der Annahme, nicht mehr Werte Problem ausmachen, können Sie es wie jedes Wörterbuch verwenden können und die doppelte * Notation als Schlüsselwort-Argumente übergeben:

url_for('test', _external=True, **request.args) 
Verwandte Themen