Forms 烧瓶请求未从select返回任何信息

Forms 烧瓶请求未从select返回任何信息,forms,flask,request,html-select,Forms,Flask,Request,Html Select,我正在尝试用Flask设置一个简单的select下拉表单。根据选择的选项,我从数据库中获取不同的数据,并将其显示回html模板上的div中。但我似乎无法获得Flask请求来注册任何选择选项。当我打印request.form或request.args时,我总是得到空的Dicts。也许我遗漏了一些简单的东西,但我似乎找不到问题所在。我已经将它用于几个输入和按钮表单,但我无法将它用于选择 下面是我的html模板代码,带有表单和select。我在表单中尝试了GET和POST方法 <div clas

我正在尝试用Flask设置一个简单的select下拉表单。根据选择的选项,我从数据库中获取不同的数据,并将其显示回html模板上的div中。但我似乎无法获得Flask请求来注册任何选择选项。当我打印request.form或request.args时,我总是得到空的Dicts。也许我遗漏了一些简单的东西,但我似乎找不到问题所在。我已经将它用于几个输入和按钮表单,但我无法将它用于选择

下面是我的html模板代码,带有表单和select。我在表单中尝试了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>

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


但是这不返回任何内容,然后我尝试只打印整个request.args或request.form,它返回空Dict。我尝试的所有内容都返回空Dict。所以我想我遗漏了一些设置,但是我觉得表格看起来很对

我不确定这是否是我一直在寻找的这个问题的实际答案,但以下是我的想法。实际上,我无法让Flask接受定义的原始explore方法中的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();
            });                
});

我试图用你的代码重现这个错误,但一切看起来都很好,我这边的工作正常。提交表单时,您是否可以在url参数(如?xaxis=hourangle)中看到该选项?否没有url参数。这很可能是问题所在,但我不明白为什么我没有得到任何。奇怪。问题在于客户端浏览器代码,而不是flask视图。你能再检查一下你是否在表单中使用了正确的动作属性端点路径吗?是的,应该是这样。这只是表单嵌入的模板html页面的名称,对吗?与表单关联的页面?它是exploresn2.html。这就是我分配给这个特殊flask方法的页面。编辑主要帖子,包括一些关于烧瓶法的内容。所以我修正了一件事。第一个div中的id在select元素中具有相同的id名称。这导致了一些混乱问题,并修复了其他奇怪的事情,但它并没有修复我的请求问题。它仍然没有注册select GET方法中的任何url_参数。
@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)
$("#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();
            });                
});