2015-08-14 1 views
11

Sono nuovo in Flask e ho problemi ad ottenere il valore dal mio tag select. Ho provato request.form['comp_select'] che restituisce una richiesta non valida. Tuttavia, quando provo a utilizzare request.form.get('comp_select'), la mia pagina di ritorno restituisce una lista vuota "[]".Ottenere il valore dal tag select usando il pallone

mio 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> 

mio 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 

Spiacente in anticipo se il mio formattazione è spento per il posto (anche una novità per Stack Overflow).

+0

Benvenuti a Stack Overflow! Su SO, le domande migliori ottengono risposte migliori. Un marchio di una buona domanda è un caso di prova breve, completo e ripetibile. Sarebbe stato utile se avessi fornito il programma ** completo ** più breve che mostri il problema. Consulta http://stackoverflow.com/help/mcve per ulteriori informazioni sui buoni casi di test e http://stackoverflow.com/help/asking per ulteriori informazioni sulle buone domande. –

+0

@ Robᵩ grazie per il consiglio! Sarò sicuro di seguirli la prossima volta che avrò una domanda. – qwertyuip9

risposta

10

È difficile sapere con certezza da quello che hai fornito, ma credo che sia necessario aggiungere method="POST" all'elemento <form>.

Dal flask doc for the request object:

di accedere ai dati del modulo (dati trasmessi in una richiesta POST o PUT) è possibile utilizzare l'attributo form. ... Per accedere ai parametri inviati nell'URL (? Key = value) puoi usare l'attributo args.

Pertanto, se si inoltrano i moduli tramite POST, utilizzare request.form.get(). Se invii i moduli tramite GET, utilizza request.args.get().

Questa applicazione si comporta il modo in cui si desidera che:

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

Questo ha risolto il mio problema! Grazie per l'aiuto ed il suggerimento. – qwertyuip9