以下面两条路线为例。
app = Flask(__name__)
@app.route("/somewhere")
def no_trailing_slash():
#case one
@app.route("/someplace/")
def with_trailing_slash():
#case two
根据 文档,可以理解以下内容:
在第一种情况下,对路由的请求
"/somewhere/"
将返回 404 响应。"/somewhere"
有效。在第二种情况下,
"/someplace/"
有效并且"/someplace"
将重定向到"/someplace/"
我希望看到的行为是 案例二 行为的 “逆向” 。例如 "/someplace/"
将重定向到 "/someplace"
而不是相反。有没有办法定义采取这种行为的路线?
根据我的理解, strict_slashes=False
可以在路由上设置,以有效地获得与案例一相同的行为,但我想要做的是让重定向行为始终重定向到 URL 而无需 尾部斜杠。
我想到使用的一种解决方案是对 404 使用错误处理程序,类似这样。 (不确定这是否有效)
@app.errorhandler(404)
def not_found(e):
if request.path.endswith("/") and request.path[:-1] in all_endpoints:
return redirect(request.path[:-1]), 302
return render_template("404.html"), 404
但我想知道是否有更好的解决方案,例如某种嵌入式应用程序配置,类似于 strict_slashes=False
我可以在全球范围内应用。也许是蓝图或网址规则?
原文由 sytech 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用
strict_slashes
进行正确的跟踪,您可以在 Flask 应用程序本身上进行配置。这将为创建的每条路由将strict_slashes
标志设置为False
然后,您可以使用
before_request
检测尾随/
进行重定向。使用before_request
将允许您不需要将特殊逻辑分别应用于每个路由