When I go to my (imaginary website), it works:
mywebsite.com/flowers
But if I add a "/" at the end, I get a "Not Found" error:
mywebsite.com/flowers/
Assuming my route is:
@app.route('/flowers', methods=['GET'])
def xyz():..
Am I supposed to redirect "/flowers/" to /"flowers" or am I supposed to add multiple routes? I'm not sure how it's supposed to work without copy-pasting my entire function for every (original route "/").
CodePudding user response:
In Flask, the URL redirection with and without trailing /
works differently.
@app.route('/works/')
def works():
return 'This works'
@app.route('/sorry')
def sorry():
return 'sorry'
The URL for the works
endpoint has a trailing slash. It’s similar to a folder in a file system. If you access the URL without a trailing slash (/works
), Flask redirects you to the URL with the trailing slash /works/
.
The URL for the sorry
endpoint does not have a trailing slash. It’s similar to the pathname of a file. Accessing the URL with a trailing slash /sorry/
produces a 404 "Not Found" error.
Alternatively, to make this works at the application level, You can use
app.url_map.strict_slashes = False
Setting strict_slashes
to False will work as expected with the /sorry/
route.
URL routes that end with a slash are branches, others are leaves. If strict_slashes
is enabled (the default), visiting a branch URL without a trailing slash will redirect to the URL with a slash appended.
Reference: Flask doc , Werkzeug Docs