浏览器中的网址在调用重定向(url_for('xxx' ))后未更新 在带有 jQuery 移动的 Flask 中



我有一个使用Flask的非常简单的python程序,如下所示。它通过弹出和注销来处理登录。问题是重定向(url_forr())调用没有更新浏览器中的url。

@app.route('/')
def index():
if not 'username' in session:
# contains a button showing a login popup form with action set to '/login'
return render_template('welcome.html')
else:
# contains a logout button with a href to '/logout'
return render_template('webapp.html') 

@app.route('/login', methods=['POST'])
def login():
session['username'] = request.form['username']
return redirect(url_for('index'))

@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))

访问"/"时,会显示欢迎页面。当我点击按钮时,会显示登录弹出窗口,其表单操作重定向到"/login"。这起作用,并且会调用并执行login()函数。重定向也是如此,但浏览器不会更新显示的url。

因此,web应用程序页面显示为/login url。当我单击"重新加载"时,我会收到一个错误,因为它试图重新加载/登录,而它应该在重定向的位置重新加载"/"。

/ologout也是如此。当显示Web应用程序页面并单击注销按钮时,将加载/logoout页面,该页面将执行logout()函数并重定向到索引。但是这个url是留给注销的。

如果我重新加载页面,它会成功,因为/logoout接受GET方法,然后url会更新为/,因为它本来应该是这样的。

我觉得这是一个jQuery移动问题,但找不到问题所在。从python和Flask的角度来看,它与我能找到的所有登录示例相匹配。

写完问题后终于解决了。

该问题是由jQuery mobile和缺少数据url属性引起的。

通过在页面div中添加数据url属性,浏览器中的url将得到更新,一切正常。

<div data-role="page" id="welcome" data-url="{{ url_for('index') }}">

最新更新