在 Flask 中使用 socketio.on() 渲染一个新模板

问题描述 投票:0回答:2

我正在尝试按照这些思路做一些事情:

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”消息时进行重定向。现在,在我单击触发

change_view()
调用的按钮后,它会进入
socket.emit('change_view', message)
函数,以便该部分正常工作。它只是根本不重定向或进入
new_view()
函数(即,如果我在
new_view()
中放置打印语句,它不会打印)。但它也没有给我任何错误。我是套接字新手,所以我猜测存在一些根本性的误解。

python flask socket.io
2个回答
9
投票

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

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

然后在你的客户端:

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

但不清楚为什么您需要针对这个特定示例访问服务器。


0
投票

对我来说工作,但我需要使用

socketio.emit('redirect', {'url': url_for('home')})

© www.soinside.com 2019 - 2024. All rights reserved.