2016-09-28 5 views
0

私は、ユーザーがcsvファイルをアップロードし、そのcsvファイルをpandasデータフレームに変換し、フォーム内の<select>タグオプションを列ヘッダーに自動的に入力するという形式です。Flaskを使用してユーザーが選択した<select>タグオプションを取得するにはどうすればよいですか?

私は、ユーザーが希望する列を選択し、その列の選択肢をFlaskを使用して変数に保存します。

ただし、この選択タグからユーザーが選択したオプションを取得するのに問題があります。

マイテンプレートコード:

<form class="form-horizontal" action="" method="post" enctype="multipart/form-data"> 
    <fieldset> 
    <legend>Text Analytics</legend> 
    <div class="form-group form-group-lg"> 
     <label for="inputData" class="col-lg-2 control-label">Choose Data File:</label> 
     <div class="col-lg-5"> 
      <input type="file" class="form-control" required="required" autofocus="autofocus" name="inputData"/> 
     </div> 
     <div class="col-lg-3"> 
      <button class="btn btn-primary" type="submit" name="upload">Upload</button> 
     </div> 
     {% if success %} 
     <div class="alert alert-success"> 
      <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a> 
      <strong>Success!</strong> {{success}}. 
     </div> 
     {% endif %} 
     {% if error %} 
     <div class="alert alert-warning"> 
      <a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a> 
      <strong>Error:</strong> {{error}}. 
     </div> 
     {% endif %} 
    </div> 
    <div class="form-group form-group-lg"> 
     <label for="colSelect" class="col-lg-2 control-label">Select column for analysis:</label> 
     <div class="col-lg-5"> 
      <select class="form-control" name="colSelect" id="colSelect"> 
      {% for column in columns %} 
       <option id="{{column}}">{{column}}</option> 
      {% endfor %} 
      </select> 
     </div> 

マイフラスココード:

@app.route('/textanalytics', methods = ['GET', 'POST']) 
def upload_file(): 
error = None 
success = None 
columns = [] 
col = None 
if request.method == "POST": 
    if request.files['inputData'] == '': 
     error = "No file selected" 
    else: 
     file = request.files['inputData'] 
     if file and allowed_file(file.filename): 
      filename = secure_filename(file.filename) 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
      success = 'File uploaded' 
      data = pd.read_csv(os.path.join(app.config['UPLOAD_FOLDER'], filename), header = 0, low_memory = False) 
      columns = [i for i in data.columns] 
      col = request.form.get('colSelect') 
      return render_template('textanalytics.html', success = success, columns = columns, col = col) 
     elif file and not allowed_file(file.filename): 
      error = 'Incorrect file type, .csv only' 
      return render_template('textanalytics.html', error = error) 
return render_template('textanalytics.html', error = error, success = success, columns = columns, col = col) 


app.add_url_rule('/uploads/<filename>', 'uploaded_file', build_only=True) 
app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {'/uploads': app.config['UPLOAD_FOLDER']}) 

あなたが見ることができるように、私はオプションが、どの運なしを取得するためにrequest.form.get('colSelect')を使用しています。初期化された値であるNoneを返します。

私はそのコードを配置する場所と関係がありますが、私はFlaskには新しく、助けを借りてできると感じています。

答えて

0

optionvalueとする必要があります。

<option value="{{ column }}">{{ column }}</option> 
+0

まだ運がない、単に「なし」と表示されているだけです。 – daniel3412

+0

ブラウザの要求に値が含まれていますか? – dirn

+0

いいえ、何もありません。フラスコファイルに 'print col'ステートメントを追加しました。値が選択されていれば私の端末で見ることができました。それは' None'値を見る場所です。 – daniel3412

0

私はそれを理解することができました。私はその書式をとり、それを2ページに分けました。そのため、ファイルのアップロードの部分は、textform1.htmlというページに独自の形式で掲載されていました。アップロードされたファイルはpandasデータフレームに変換され、textform2.htmlという新しいページがレンダリングされます。このページには<select>の部分だけが含まれていたため、ユーザーから選択内容を取得できました。

関連する問題