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

时间:2014-05-23 17:43:38

标签: python flask socket.io

我试图按照以下方式做点什么:

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)函数,以便该部分正常工作。它根本没有重定向或进入new_view()功能(例如,如果我在new_view()中打印一个不打印的打印声明)。但它也没有给我任何错误。我是插座的新手,所以我猜测还有一些根本性的误解。

1 个答案:

答案 0 :(得分:4)

是的,socket.io并没有这样的工作。您可以发送一条消息,告诉客户端加载新页面。

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

然后在你的客户端:

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

但是不清楚为什么你需要为这个特定的例子点击服务器。