Bird
Raised Fist0
Flaskframework~10 mins

Trailing slash behavior in Flask - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Trailing slash behavior
Client requests URL
↓
Check route with trailing slash?
↓
Redirect to URL with slash
↓
Client follows redirect
↓
Return response
When a Flask route ends with a slash, Flask redirects requests without the slash to the slash version. If no slash, Flask serves directly or 404.
Execution Sample
Flask
from flask import Flask
app = Flask(__name__)

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

# Request to '/hello' triggers redirect to '/hello/'
Defines a route with trailing slash; accessing URL without slash redirects to URL with slash.
Execution Table
StepRequested URLRoute DefinedMatch?ActionResponse
1/hello/hello/No exact matchRedirect to '/hello/'302 Redirect
2/hello//hello/MatchCall hello()200 OK with 'Hello!'
3/hello//helloNo route defined404 Not Found404 Error
💡 Execution stops after redirect or response is returned.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
Requested URLNone/hello/hello//hello/
Matched RouteNoneNone (redirect)/hello/None
ResponseNone302 Redirect200 OK 'Hello!'404 Not Found
Key Moments - 2 Insights
Why does Flask redirect from '/hello' to '/hello/' when the route ends with a slash?
Because the route is defined with a trailing slash, Flask expects the URL to have it. When missing, Flask sends a redirect to add the slash, as shown in execution_table step 1.
What happens if you define a route without a trailing slash and access it with a slash?
Flask does not redirect in this case and returns 404 Not Found, because the exact route with slash is not defined. This is the opposite behavior of trailing slash routes.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what response does Flask send when requesting '/hello' if the route is defined as '/hello/'?
A302 Redirect to '/hello/'
B200 OK with 'Hello!'
C404 Not Found
D500 Internal Server Error
💡 Hint
Check execution_table row 1 for requested URL '/hello' and route '/hello/'
At which step does Flask serve the actual content 'Hello!'?
AStep 3
BStep 1
CStep 2
DNever
💡 Hint
Look at execution_table row 2 where requested URL matches route exactly
If the route was defined as '/hello' (no slash), what would happen when requesting '/hello/'?
AFlask redirects to '/hello'
BFlask returns 404 Not Found
CFlask serves the route directly
DFlask returns 500 Internal Server Error
💡 Hint
Refer to key_moments about no trailing slash route behavior
Concept Snapshot
Flask routes ending with a slash expect URLs with slash.
If URL misses slash, Flask redirects (302) to add it.
Routes without trailing slash do not redirect if slash is added.
This helps avoid duplicate URLs and keeps URLs consistent.
Remember: trailing slash means 'folder-like' URL; no slash means 'file-like' URL.
Full Transcript
In Flask, when you define a route with a trailing slash like '/hello/', Flask expects the URL to end with a slash. If a user requests '/hello' without the slash, Flask sends a 302 redirect to '/hello/'. The client then follows this redirect and Flask serves the content. If the route is defined without a trailing slash, Flask will not redirect if the URL has a slash and will return a 404 error instead. This behavior helps keep URLs consistent and avoids duplicate content. The execution table shows these steps clearly: first a redirect when the slash is missing, then serving the content when the URL matches exactly, or a 404 if no matching route exists.

Practice

(1/5)
1. In Flask, what happens if you define a route with a trailing slash like @app.route('/home/') and a user visits /home without the slash?
easy
A. Flask returns a 404 Not Found error.
B. Flask serves the /home route without redirecting.
C. Flask redirects the user to /home/ automatically.
D. Flask throws a server error.

Solution

  1. Step 1: Understand trailing slash behavior in Flask routes

    Routes defined with a trailing slash expect URLs to end with a slash.
  2. Step 2: Check Flask's automatic redirect behavior

    If a user visits the URL without the trailing slash, Flask automatically redirects to the URL with the slash.
  3. Final Answer:

    Flask redirects the user to /home/ automatically. -> Option C
  4. Quick Check:

    Trailing slash route redirects missing slash URL [OK]
Hint: Trailing slash routes redirect missing slash URLs [OK]
Common Mistakes:
  • Thinking Flask serves both URLs without redirect
  • Assuming 404 error occurs without slash
  • Believing Flask throws server error
2. Which of the following is the correct syntax to define a Flask route that does NOT accept a trailing slash?
easy
A. @app.route('/about/')
B. @app.route('/about//')
C. @app.route('about/')
D. @app.route('/about')

Solution

  1. Step 1: Identify correct route syntax without trailing slash

    To define a route that does not accept a trailing slash, the route string should not end with a slash.
  2. Step 2: Check each option

    @app.route('/about') uses '/about' without a trailing slash, which is correct syntax.
  3. Final Answer:

    @app.route('/about') -> Option D
  4. Quick Check:

    Route without trailing slash = no slash in route string [OK]
Hint: No trailing slash means route string ends without slash [OK]
Common Mistakes:
  • Adding extra slashes in route string
  • Omitting leading slash in route
  • Confusing trailing slash with double slashes
3. Given this Flask code:
@app.route('/page/')
def page():
    return 'Page with slash'

What will happen if a user visits /page in their browser?
medium
A. The user sees 'Page with slash' without URL change.
B. The user is redirected to /page/ and sees 'Page with slash'.
C. The user gets a 404 Not Found error.
D. The server crashes with an error.

Solution

  1. Step 1: Analyze route definition with trailing slash

    The route '/page/' expects URLs ending with a slash.
  2. Step 2: Understand Flask's redirect behavior

    If the user visits '/page' without the slash, Flask redirects to '/page/' automatically and serves the response.
  3. Final Answer:

    The user is redirected to /page/ and sees 'Page with slash'. -> Option B
  4. Quick Check:

    Trailing slash route redirects missing slash URL [OK]
Hint: Trailing slash route redirects missing slash URL [OK]
Common Mistakes:
  • Assuming no redirect happens
  • Expecting 404 error on missing slash
  • Thinking server crashes on missing slash
4. Consider this Flask code:
@app.route('/contact')
def contact():
    return 'Contact page'

What happens if a user visits /contact/ with a trailing slash?
medium
A. Flask returns a 404 Not Found error.
B. Flask throws a server error.
C. Flask serves the page normally.
D. Flask redirects to /contact without slash.

Solution

  1. Step 1: Identify route without trailing slash

    The route '/contact' is defined without a trailing slash.
  2. Step 2: Check Flask behavior on extra trailing slash

    Flask does NOT redirect URLs with an extra trailing slash to the no-slash route; it returns a 404 error.
  3. Final Answer:

    Flask returns a 404 Not Found error. -> Option A
  4. Quick Check:

    No trailing slash route rejects extra slash URL [OK]
Hint: No trailing slash route rejects URLs with slash [OK]
Common Mistakes:
  • Thinking Flask redirects to no-slash URL
  • Assuming page loads normally with slash
  • Believing server throws error instead of 404
5. You want a single Flask route to accept both /blog and /blog/ URLs without redirecting or 404 errors. Which approach achieves this?
hard
A. Use Flask's strict_slashes=False option on the route decorator.
B. Define one route with trailing slash: @app.route('/blog/') only.
C. Define one route without trailing slash: @app.route('/blog') only.
D. Define two routes: @app.route('/blog') and @app.route('/blog/') pointing to the same function.

Solution

  1. Step 1: Understand default Flask behavior

    By default, Flask treats routes with and without trailing slash differently, redirecting or 404ing as needed.
  2. Step 2: Use strict_slashes=False to accept both

    Setting strict_slashes=False on the route decorator disables strict trailing slash matching, allowing both URLs without redirect or error.
  3. Final Answer:

    Use Flask's strict_slashes=False option on the route decorator. -> Option A
  4. Quick Check:

    strict_slashes=False allows both URLs [OK]
Hint: Use strict_slashes=False to accept both slash and no-slash URLs [OK]
Common Mistakes:
  • Defining two routes duplicates code
  • Relying on default redirect behavior
  • Ignoring strict_slashes option
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard