我正在尝试使用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。所以我想错了一些我想的设置,但表格对我来说是正确的?
答案 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();
});
});