如何使用Flask获取用户选择的<select>标签选项?

时间:2016-09-28 07:54:31

标签: javascript python html flask

我有一个表单,用户上传csv文件,然后csv文件转换为pandas数据帧,列标题自动填充&lt; select&gt;表单中的标签选项。 然后,我希望用户选择他们想要的列,并希望使用Flask将该列选择保存在变量中。 但是,我在检索用户随后从此选择标记中选择的选项时遇到问题。 我的模板代码: &lt; form class =&#34; form-horizo​​ntal&#34;行动=&#34;&#34;方法=&#34;后&#34; ENCTYPE =&#34;多部分/格式数据&#34;&GT;   &LT;字段集&GT;      &lt; legend&gt; Text Analytics&lt; / legend&gt;      &lt; div class =&#34; form-group form-group-lg&#34;&gt;         &lt; label for =&#34; inputData&#34; class =&#34; col-lg-2 control-label&#34;&gt;选择数据文件:&lt; / label&gt;         &lt; div class =&#34; col-lg-5&#34;&gt;            &lt; input type =&#34; file&#34;类=&#34;形状控制&#34;需要=&#34;需&#34;自动对焦=&#34;自动对焦&#34;名称=&#34; inputData&#34; /&GT;         &LT; / DIV&GT;         &lt; div class =&#34; col-lg-3&#34;&gt;             &lt; button class =&#34; btn btn-primary&#34;类型=&#34;提交&#34;名称=&#34;上传&#34;&GT;上传&LT; /按钮&GT;         &LT; / DIV&GT;         {%if if success%}         &lt; div class =&#34; alert alert-success&#34;&gt;             &lt; a href =&#34;#&#34;类=&#34;靠近&#34;数据驳回=&#34;警报&#34;咏叹调标签=&#34;靠近&#34;&GT;&安培;倍;&LT; / A&GT;             &LT;强&GT;!成功与LT; /强&GT; {{成功}}。         &LT; / DIV&GT;         {% 万一 %}         {%if error%}         &lt; div class =&#34; alert alert-warning&#34;&gt;             &lt; a href =&#34;#&#34;类=&#34;靠近&#34;数据驳回=&#34;警报&#34;咏叹调标签=&#34;靠近&#34;&GT;&安培;倍;&LT; / A&GT;             &LT;强&GT;错误:其中/强&GT; {{错误}}。         &LT; / DIV&GT;         {% 万一 %}     &LT; / DIV&GT;      &lt; div class =&#34; form-group form-group-lg&#34;&gt;         &lt; label for =&#34; colSelect&#34; class =&#34; col-lg-2 control-label&#34;&gt;选择要分析的列:&lt; / label&gt;         &lt; div class =&#34; col-lg-5&#34;&gt;             &lt; select class =&#34; form-control&#34;命名=&#34; colSelect&#34; ID =&#34; colSelect&#34;&GT;             {%表示列%}                 &lt; option id =&#34; {{column}}&#34;&gt; {{column}}&lt; / option&gt;             {%endfor%}             &LT; /选择&GT;         &LT; / DIV&GT; 我的Flask代码: @ app.route(&#39; / textanalytics&#39;,methods = [&#39; GET&#39;,&#39; POST&#39;]) def upload_file(): 错误=无 成功=无 columns = [] col =无 if request.method ==&#34; POST&#34;:     if request.files [&#39; inputData&#39;] ==&#39;&#39;:         错误=&#34;没有选择文件&#34;     其他:         file = request.files [&#39; inputData&#39;]         if file和allowed_file(file.filename):             filename = secure_filename(file.filename)             file.save(os.path.join(app.config [&#39; UPLOAD_FOLDER&#39;],filename))             成功=&#39;文件已上传&#39;             data = pd.read_csv(os.path.join(app.config [&#39; UPLOAD_FOLDER&#39;],filename),header = 0,low_memory = False)             columns = [i for data in data.columns]             col = request.form.get(&#39; colSelect&#39;)             return render_template(&#39; textanalytics.html&#39;,success = success,columns = columns,col = col)         elif文件而不是allowed_file(file.filename):             错误=&#39;文件类型不正确,仅限.csv&#39;             return render_template(&#39; textanalytics.html&#39;,error = error) return render_template(&#39; textanalytics.html&#39;,error = error,success = success,columns = columns,col = col) app.add_url_rule(&#39; / uploads /&lt; filename&gt;&#39;,&#39; uploaded_file&#39;,build_only = True) app.wsgi_app = SharedDataMiddleware(app.wsgi_app,{&#39; / uploads&#39;:app.config [&#39; UPLOAD_FOLDER&#39;]}) 正如您所看到的,我正在使用request.form.get(&#39; colSelect&#39;)来检索选项,但没有任何运气。它只返回None,这是它的初始化值。 我有一种感觉,它与我放置代码的地方有关,但我是Flask的新手,所以可以提供一些帮助。

2 个答案:

答案 0 :(得分:0)

您必须为每个option提供一个value

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

答案 1 :(得分:0)

我设法搞清楚了。我把表格分成两页分开。因此,文件上传部分在名为textform1.html的网页上以其自己的形式出现。上传的文件将转换为pandas数据帧,然后将呈现名为textform2.html的新页面。这个页面只包含自己形式的<select>部分,因此我可以从用户那里捕获选择。