Flask重定向URL包含锚点

25

我在使用Python代码重定向锚点时遇到了一些问题。

我的代码:

func():
    ...
    redirect(url_for('my_view', param=param, _anchor='my_anchor'))

这个重定向没有将我重定向到#my_anchor。

在模板链接中,如:

<a href="{{ url_for('my_view', param=param, _anchor='my_anchor') }}"></a>

工作良好... 可能是在Flask函数“redirect”中出了问题。

我该如何在Flask中使用带锚点的重定向?

Flask版本0.10.x


没有在“_anchor”中使用哈希标记对我来说也能正常工作。 - Markus Unterwaditzer
Markus,抱歉,我也没有使用哈希...是我的错误。 - astwild
2
你有使用过像Firebug或内置的Chrome开发者工具这样的工具来查看确切的HTTP请求吗?当你被重定向时,你被重定向到哪个URL?此外,你是否实际“返回”redirect()函数的结果,还是只是调用该函数?如果您能提供一个简短的示例来说明您的问题,我们更容易找出解决方法。 - Mark Hildreth
1
我刚刚写了一个快速测试,但无法复现这个问题。在这个测试中,当我访问/one时,我被重定向到/two#blah并且如预期一样滚动到页面底部。 - Mark Hildreth
1
curl 是什么意思?例如 curl -IL http://localhost:5000/test - TNT
当我从主文件重定向时,它可以工作。但是当我尝试从我的包含模块中使用此重定向时,它不起作用。我只能得到重定向到链接而没有锚点。 - astwild
2个回答

21

如果您的目标是在URL中预先选择一个锚点并重定向到该页面,我认为问题可能与您在'url_for'中传递的函数有关。以下是我尝试实现您所描述的内容。

views.py

from flask import Flask
from flask import redirect, url_for
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/myredirect')
def my_redirect():
    return redirect(url_for('hello_world',_anchor='my_anchor'))


if __name__ == '__main__':
    app.run()

无需模板,因为一旦访问 /myredirect ,您将被重定向到带有锚点 #my_anchor 的 /

在使用 $ python views.py 启动视图并导航至 http://127.0.0.1:5000/myredirect 后,您最终会进入 http://127.0.0.1:5000/#my_anchor


1
_anchor='my_anchor' 很准确。感谢您的发布。 - phyatt

3
一个简单而快速的方法是:
return redirect(url_for('hello_world') + '#my_anchor')

替代

return redirect(url_for('hello_world',_anchor='my_anchor'))

这个方法可行是因为url_for返回了一个终端点的字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接