我知道您可以使用jquery中的$.ajax()
之类的调用轻松地将表单数据发送到flask,但是我需要的是一种使用元素<p>
标签将数据发送到flask服务器的方法。
例如: test.html
<p data-rep='testentry' class='qtemp'>Entry00</p>
<p data-rep='testentry01' class='qtemp'>Entry01</p>
index.js
$(document).ready(function(){
$('.qtemp').on('click',function(){
var layout = $(this).data('rep');
$.ajax({
url: 'workstation',
type: 'POST',
data: layout
});
});
});
main.py
@app.route('/workstation',methods=['GET','POST'])
def workstation(data):
layout = data
return render_template('station.html',target=layout)
运行此应用程序:
station.html
layout
变量(我添加了一条print语句,但它不起作用,甚至尝试将其写入文件中)我尝试过的事情:
index.js
中,将data: layout
替换为data: JSON.stringify(layout)
,然后在.main.py
中,将layout = data
替换为layout = request.args.get('data')
。不用说,所有这些都不起作用
注意:不能使用html表单
答案 0 :(得分:1)
您需要修改ajax
,以确保从Python路由接收到JSON
化的结果。另外,为了存储从ajax调用返回的数据,必须使用flask.request.args
通过键名访问值:
在index.js
中:
$(document).ready(function(){
$('.qtemp').on('click',function(){
var layout = $(this).data('rep');
$.ajax({
url: "/workstation",
type: "get",
data: {layout: layout},
success: function(response) {
var new_html = response.html;
},
});
});
});
在main.py
中:
@app.route('/workstation')
def workstation():
layout = flask.request.args.get('layout')
return flask.jsonify({'html':flask.render_template('station.html',target=layout)})
编辑:您可以将ajax
请求中获得的值存储在flask.session
中,然后重定向到所需的页面。为此,请创建一条附加路径来保存该值,然后在window.location.replace
ajax
函数的主体中使用success
:
在index.js
中:
$(document).ready(function(){
$('.qtemp').on('click',function(){
var layout = $(this).data('rep');
$.ajax({
url: "/update_layout",
type: "get",
data: {layout: layout},
success: function(response) {
window.location.replace('/workstation');
},
});
});
});
在main.py
import string, random
app.secret_key = ''.join(random.choice(string.printable) for _ in range(20))
#secret_key needed for session implementation
@app.route("/update_layout")
def update_layout():
flask.session['layout'] = flask.request.args.get('layout')
return flask.jsonify({'success':'True'})
@app.route('/workstation', methods=['GET'])
def workstation():
return flask.render_template('station.html',target = flask.session['layout'])