以下面兩條路線爲例。Flask路線中的尾部斜線
app = Flask(__name__)
@app.route("/somewhere")
def no_trailing_slash():
#case one
@app.route("/someplace/")
def with_trailing_slash():
#case two
根據the docs以下理解:
在情況下,一個,用於路線
"/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
,我可以在全局範圍。也許一個藍圖或網址規則?
同時實現seperately並有'/ somplace /'重定向到'/ someplace'? – Busturdust
我注意到當你在Flask配置中有'DEBUG = True'時,尾部空格不會被重定向,但當'DEBUG = False'時,它會被重定向。 –
@Busturdust可能可以工作,但會是一種痛苦的管理。我有一些其他想法涉及使用[錯誤處理程序](http://flask.pocoo.org/docs/0.11/patterns/errorpages/#error-handlers),如果存在無斜槓端點,則返回重定向。也可以使用某種藍圖。但是我已經使用了404錯誤處理程序來處理其他事情(它可以被烘烤,但我寧願不),我不確定是否可以通過藍圖實現。理想的解決方案是像全球網址規則一樣的投入。 – sytech