关于javascript:在JS Click事件的Flask中的render_template

render_template in Flask on JS click event

本问题已经有最佳答案,请猛点这里访问。

我试图通过单击一个按钮来调用flask中的函数。单击按钮时,将运行以下脚本。

JS

1
2
3
$("#load_btn").click(function() {
    $.get("/callback");
}

1
2
3
4
5
@app.route('/callback')
def callback():
    print('called')
    ... # code here that needs to run before rendering callback
    return render_template('callback.html')

这里的问题是,called被打印出来,GET /callback HTTP/1.1 200也被记录下来,但是callback.html没有被呈现出来——页面保持不变。我猜这可能不是解决这个问题的最佳方法,但是如果是,推荐的方法是什么?


$.get只是向您的服务器发送一个HTTP请求,但实际上它对从服务器返回的数据(在您的情况下,是呈现的模板)没有做任何处理。

尝试如下操作:

1
2
3
$("#load_btn").click(function() {
    $("html").load("/callback");
}

或者,如果呈现的模板不包含任何标记,只包含正文内容,则可以这样做。

1
2
3
$("#load_btn").click(function() {
    $("body").load("/callback");
}

或者,可以将"body"替换为特定元素,以仅替换页面的特定部分。

如果要重定向用户,请执行以下操作:

1
2
3
$("#load_btn").click(function() {
    window.location ="/callback";
}