Flask请求不从select返回任何信息

时间:2014-05-01 15:30:21

标签: forms flask request html-select

我正在尝试使用Flask设置一个简单的选择下拉表单。根据选择的选项,我从我的数据库中获取不同的数据,并将其显示回我的html模板上的div。但我似乎无法让Flask请求注册任何选择选项。当我打印request.form或request.args时,我总是得到空的Dicts。这可能是我想念的简单但我似乎无法找到问题。我已经使用了几个输入和按钮形式,但我不能让它适合选择。

以下是我的html模板代码,包含表单和选择。我在表单中尝试了GET和POST方法。

<div class="options" id="options">
    <form class="form-horizontal container-fluid" role="form" method="GET" action="exploresn2.html">
        <div class="form-group">
            <label for="xaxis" class="col-sm-2 control-label">X-axis:</label>
            <div class="col-sm-2">
                <select name="xaxis" class="form-control" id="xaxis">
                    <option selected value="mjd" id="mjd">MJD</option>
                    <option value="seeing" id="seeing">Seeing</option>
                    <option value="airmass" id="airmass">Airmass</option>
                    <option value="hourangle" id="hourangle">Hour Angle</option>
                </select>
            </div>
        </div>
    </form>         
</div>

在Flask中,我首先在我的应用程序中尝试了

 import flask
 from flask import request, render_template, send_from_directory, current_app

 explore_page = flask.Blueprint("explore_page", __name__)

 @explore_page.route('/exploresn2.html', methods=['GET','POST'])
 def explore():

      xaxis = str(request.args.get("xaxis", "any"))

      .... [populate new xaxis variable based on request option selected]

      exploreDict['xaxis'] = xaxis
      return render_template("exploresn2.html", **exploreDict)

mjd = valueFromRequest(key='mjd', request=request, default=None)
if mjd:
    mjds = [int(exp.platedbExposure.start_time/(24*3600)) for exp in exposures]
    xaxis = mjds

exploreDict['xaxis'] = xaxis

查找并获取特定值,或者在第一种情况下,选择任何值。 valueFromRequest是从GET或POST请求中获取数据的函数。

但是这没有返回任何内容,然后我尝试打印整个request.args(或request.form)并返回并清空Dict。我尝试的所有东西仍然会返回空的Dicts。所以我想错了一些我想的设置,但表格对我来说是正确的?

1 个答案:

答案 0 :(得分:1)

我不确定这是否是我正在寻找的这个问题的实际答案,但这是我想出的。我实际上无法让Flask接受定义的原始探索方法的GET请求,所以我在Flask中实现了一个新方法来返回一个JSON对象

@explore_page.route('/getdata', methods=['GET','POST'])
def getData(name=None):

     name = str(request.args.get("xaxis", "mjd"))
     xaxis = 'populate new xaxis data based on value of name'
     data = '(x,y) data array filled with values for plotting'
     axisrange = range of x,y data for axes for plot 

     return jsonify(result=data, range=axisrange)

然后我只是在选择按钮发生变化时通过javascript向该方法发出GET请求。所以在我的exploresn2.html模板中(使用Flot进行绘图)

$("#xaxis").change(function(){

    var newname = $("#xaxis :selected").text();
    var axes = plot.getAxes();
    options = plot.getOptions();
    var plotdata = plot.getData();

    // make a GET request and return new data       
    $.getJSON($SCRIPT_ROOT + '/getdata', {'xaxis':$("#xaxis :selected").val()},
            function(newdata){
                // set new data
                for (var i = 0; i < plotdata.length; ++i) {
                    plotdata[i].data = newdata.result[plotdata[i].label];
                }
                // set new axes
                axes.xaxis.options.panRange = [newdata.range[0]-50,newdata.range[1]+50];
                axes.xaxis.options.axisLabel = newname;
                axes.xaxis.options.min = newdata.range[0]-1;
                axes.xaxis.options.max = newdata.range[1]+1;
                axes.yaxis.options.min = newdata.range[2];
                axes.yaxis.options.max = newdata.range[3];                  
                // redraw plot
                plot.setData(plotdata);
                plot.setupGrid();
                plot.draw();
            });                
});