2015-08-14 9 views
11

Ich bin neu in Flask und ich habe Probleme, den Wert von meinem Select-Tag. Ich habe versucht, request.form['comp_select'], die eine schlechte Anfrage zurückgibt. Wenn ich jedoch versuche, request.form.get('comp_select') zu verwenden, gibt meine Rückgabeseite eine leere Liste "[]" zurück.Wert von Auswahl Tag mit Kolben

Mein html:

<form class="form-inline" action="{{ url_for('test') }}"> 
    <div class="form-group"> 
    <div class="input-group"> 
     <span class="input-group-addon">Please select</span> 
      <select name="comp_select" class="selectpicker form-control"> 
       {% for o in data %} 
       <option value="{{ o.name }}">{{ o.name }}</option> 
       {% endfor %}            
      </select> 
    </div> 
    <button type="submit" class="btn btn-default">Go</button> 
    </div> 
</form> 

Mein app.py:

@app.route("/test" , methods=['GET', 'POST']) 
def test(): 
    select = request.form.get('comp_select') 
    return(str(select)) # just to see what select is 

leider im Voraus, wenn meine Formatierung für den Posten ausgeschaltet ist (auch neuer Überlauf Stack).

+0

Willkommen bei Stack-Überlauf! Auf SO erhalten bessere Fragen bessere Antworten. Ein Zeichen für eine gute Frage ist ein kurzer, vollständiger und wiederholbarer Testfall. Es wäre hilfreich gewesen, wenn Sie das kürzeste ** vollständige ** Programm zur Verfügung gestellt hätten, das das Problem aufzeigt. Weitere Informationen zu guten Testfällen finden Sie unter http://stackoverflow.com/help/mcve. Weitere Informationen zu guten Fragen finden Sie unter http://stackoverflow.com/help/asking. –

+0

@ Robᵩ danke für den Rat! Ich werde sicher sein, denen zu folgen, wenn ich das nächste Mal eine Frage habe. – qwertyuip9

Antwort

10

Es ist schwer zu wissen, was Sie zur Verfügung gestellt haben, aber ich glaube, dass Sie method="POST" zu Ihrem <form> Element hinzufügen müssen.

Vom flask doc for the request object:

Formulardaten Für den Zugriff auf (Daten in einer POST übertragen oder PUT-Anfrage) Sie das Formular Attribut verwenden können. ... Um auf Parameter zuzugreifen, die in der URL (? Key = value) übergeben wurden, können Sie das Argument args verwenden.

Wenn Sie also Ihre Formulare per POST senden, verwenden Sie request.form.get(). Wenn Sie Ihre Formulare über GET senden, verwenden Sie request.args.get().

Diese App verhält sich so, wie Sie es haben wollen:

flask_app.py:

#!/usr/bin/env python 
from flask import Flask, flash, redirect, render_template, \ 
    request, url_for 

app = Flask(__name__) 

@app.route('/') 
def index(): 
    return render_template(
     'index.html', 
     data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}]) 

@app.route("/test" , methods=['GET', 'POST']) 
def test(): 
    select = request.form.get('comp_select') 
    return(str(select)) # just to see what select is 

if __name__=='__main__': 
    app.run(debug=True) 

templates/index.html

<form class="form-inline" method="POST" action="{{ url_for('test') }}"> 
    <div class="form-group"> 
    <div class="input-group"> 
     <span class="input-group-addon">Please select</span> 
      <select name="comp_select" class="selectpicker form-control"> 
       {% for o in data %} 
       <option value="{{ o.name }}">{{ o.name }}</option> 
       {% endfor %} 
      </select> 
    </div> 
    <button type="submit" class="btn btn-default">Go</button> 
    </div> 
</form> 
+0

Das hat mein Problem gelöst! Danke für die Hilfe und den Rat. – qwertyuip9