【问题标题】:Render a new template with socketio.on() in Flask在 Flask 中使用 socketio.on() 渲染一个新模板
【发布时间】:2014-07-13 04:18:31
【问题描述】:

我正在尝试按照以下方式做一些事情:

from flask import Flask, render_template, redirect, url_for
from flask.ext.socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app)

@app.route('/start')
def start():
    return render_template('start.html')

@app.route('/new_view')
def new_view():
    return render_template('new_view.html')

@socketio.on('change_view')
def change_view(message):
    return redirect(url_for('new_view'))

if __name__ == "__main__":
    socketio.run(app, host='127.0.0.1', port=8080)

基本上,如果它从客户端获得“change_view”消息,我希望它重定向。现在,在我单击触发socket.emit('change_view', message) 调用的按钮后,它会进入change_view() 函数,因此该部分可以工作。它根本不会重定向或进入new_view() 函数(即,如果我在new_view() 中放置打印语句,它不会打印)。但它也没有给我任何错误。我是套接字新手,所以我猜可能存在一些根本性的误解。

【问题讨论】:

  • 如果可能,请注意提供可运行的代码。您的代码似乎几乎完整,但显然错过了一些导入,这需要猜测。
  • 完成,对此感到抱歉。

标签: python flask socket.io


【解决方案1】:

是的,socket.io 不能那样工作。您可以发送一条消息告诉客户端加载一个新页面。

emit('redirect', {'url': url_for('new_view')})

然后在您的客户端中:

socket.on('redirect', function (data) {
    window.location = data.url;
});

但对于这个特定的示例,您根本不清楚为什么需要访问服务器。

【讨论】:

  • 酷,谢谢。您是否了解为什么尽管没有实际重定向但它没有给我任何错误?
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多