Bird
Raised Fist0
Djangoframework~10 mins

URL parameters with angle brackets in Django - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - URL parameters with angle brackets
Start: URL request
↓
Django URL dispatcher reads pattern
↓
Detect angle brackets <param>
↓
Extract parameter value from URL
↓
Pass parameter to view function
↓
View uses parameter to generate response
↓
Send response back to browser
Django reads the URL pattern with angle brackets, extracts the parameter from the URL, and passes it to the view function.
Execution Sample
Django
from django.urls import path
from django.http import HttpResponse

def view(request, name):
    return HttpResponse(f"Hello, {name}!")

urlpatterns = [
    path('hello/<str:name>/', view),
]
This code defines a URL pattern that captures a string parameter 'name' from the URL and passes it to the view.
Execution Table
StepURL RequestedURL Pattern MatchedParameter ExtractedView Called WithResponse Output
1/hello/Alice/hello/<str:name>/name = 'Alice'view(request, name='Alice')Hello, Alice!
2/hello/Bob/hello/<str:name>/name = 'Bob'view(request, name='Bob')Hello, Bob!
3/hello/123/hello/<str:name>/name = '123'view(request, name='123')Hello, 123!
4/hello/No matchNo parameterNo view called404 Not Found
💡 Execution stops when URL does not match the pattern or after response is sent.
Variable Tracker
VariableStartAfter 1After 2After 3After 4
nameNone'Alice''Bob''123'None
Key Moments - 3 Insights
Why does the URL '/hello/' not call the view function?
Because the URL pattern expects a parameter inside angle brackets, like '<str:name>', so '/hello/' without a parameter does not match the pattern (see execution_table row 4).
What happens if the parameter is a number but the pattern expects a string?
The pattern '<str:name>' accepts any string including numbers as strings, so '123' is accepted as a string parameter (see execution_table row 3).
How does Django know which part of the URL is the parameter?
Django uses the angle brackets in the URL pattern to identify the parameter position and type, then extracts that part from the URL (see concept_flow step 'Detect angle brackets <param>').
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'name' when the URL '/hello/Bob/' is requested?
A'Alice'
B'Bob'
C'123'
DNone
💡 Hint
Check execution_table row 2 under 'Parameter Extracted' and 'View Called With'.
At which step does the URL not match the pattern and cause a 404 error?
AStep 4
BStep 3
CStep 1
DStep 2
💡 Hint
Look for 'No match' and '404 Not Found' in execution_table.
If the URL pattern was changed to 'hello/<int:name>/', what would happen when requesting '/hello/Alice/'?
AThe view is called with name='Alice'
BThe view is called with name=0
CThe URL does not match and returns 404
DThe server crashes
💡 Hint
Check how type converters like affect matching in the execution_table and concept_flow.
Concept Snapshot
Django URL patterns use angle brackets <param> to capture parts of the URL as parameters.
Syntax: path('route/<type:name>/', view).
The parameter is extracted from the URL and passed to the view.
If the URL does not match the pattern, Django returns 404.
Type converters like str, int specify expected parameter type.
Full Transcript
In Django, URL patterns can include parameters inside angle brackets, like <str:name>. When a URL request comes in, Django matches it against the pattern. If it matches, Django extracts the parameter value from the URL and passes it to the view function as an argument. For example, the URL '/hello/Alice/' matches the pattern 'hello/<str:name>/', so the parameter 'name' is set to 'Alice'. The view then uses this parameter to create a response, such as 'Hello, Alice!'. If the URL does not include the parameter or does not match the pattern, Django returns a 404 error. Type converters like str or int inside the angle brackets tell Django what type to expect and help with matching. This process allows dynamic URLs that can change based on user input or other data.

Practice

(1/5)
1. What does the angle bracket syntax <int:id> in a Django URL pattern do?
easy
A. Creates a static URL segment named 'int:id'.
B. Specifies a query parameter instead of a URL segment.
C. Defines a string variable named 'id' without type conversion.
D. Captures a part of the URL as an integer variable named 'id'.

Solution

  1. Step 1: Understand angle brackets in Django URLs

    Angle brackets capture parts of the URL as variables to pass to views.
  2. Step 2: Recognize the converter and variable name

    The syntax <int:id> captures an integer named 'id'.
  3. Final Answer:

    Captures a part of the URL as an integer variable named 'id'. -> Option D
  4. Quick Check:

    URL parameter with <int:id> = integer variable capture [OK]
Hint: Angle brackets capture URL parts as typed variables [OK]
Common Mistakes:
  • Thinking it creates a static URL segment
  • Confusing query parameters with URL parameters
  • Ignoring the type converter like int or str
2. Which of the following is the correct syntax to capture a slug parameter named 'post_slug' in a Django URL pattern?
easy
A. path('post/<str:post_slug>/', views.post_detail)
B. path('post/<slug:post_slug>/', views.post_detail)
C. path('post/<post_slug:slug>/', views.post_detail)
D. path('post/<slug>post_slug/', views.post_detail)

Solution

  1. Step 1: Identify correct converter and variable order

    The correct syntax is <converter:variable_name>, so <slug:post_slug> is correct.
  2. Step 2: Check the full path syntax

    path('post/<slug:post_slug>/', views.post_detail) uses path('post/<slug:post_slug>/', views.post_detail), which is valid Django syntax.
  3. Final Answer:

    path('post/<slug:post_slug>/', views.post_detail) -> Option B
  4. Quick Check:

    Converter before variable name = path('post/<slug:post_slug>/', views.post_detail) [OK]
Hint: Use <converter:variable> format for URL parameters [OK]
Common Mistakes:
  • Swapping converter and variable name
  • Missing colon between converter and variable
  • Using invalid syntax like <slug>post_slug
3. Given this URL pattern: path('user/<int:user_id>/', views.profile), what will user_id be if the URL is /user/42/?
medium
A. A slug '42'
B. The string '42'
C. The integer 42
D. A syntax error occurs

Solution

  1. Step 1: Understand the int converter effect

    The <int:user_id> converter converts the URL segment to an integer.
  2. Step 2: Apply to the URL segment '42'

    The string '42' from the URL is converted to the integer 42 before passing to the view.
  3. Final Answer:

    The integer 42 -> Option C
  4. Quick Check:

    int converter converts URL part to integer [OK]
Hint: int converter makes URL part an integer, not string [OK]
Common Mistakes:
  • Assuming the parameter is a string
  • Confusing slug with int converter
  • Expecting a syntax error for valid syntax
4. Identify the error in this Django URL pattern: path('article/<int:id>', views.detail)
medium
A. Missing closing angle bracket '>' after 'id'.
B. Using 'int' converter instead of 'str'.
C. View function 'detail' is not imported.
D. URL pattern should not use angle brackets.

Solution

  1. Step 1: Check angle bracket syntax

    The pattern uses <int:id> without the closing '>' character, which is invalid syntax.
  2. Step 2: Confirm correct syntax

    The correct syntax requires both opening and closing angle brackets: <int:id>.
  3. Final Answer:

    Missing closing angle bracket '>' after 'id'. -> Option A
  4. Quick Check:

    Angle brackets must be complete <int:id> [OK]
Hint: Always close angle brackets in URL parameters [OK]
Common Mistakes:
  • Forgetting the closing '>'
  • Confusing converter types
  • Assuming view import errors cause syntax issues
5. You want to create a URL pattern that captures a username (letters, numbers, underscores) and a post ID (integer). Which of these is the best Django URL pattern?
hard
A. path('profile/<slug:username>/post/<int:post_id>/', views.post_view)
B. path('profile/<str:username>/post/<int:post_id>/', views.post_view)
C. path('profile/<int:username>/post/<int:post_id>/', views.post_view)
D. path('profile/<username>/post/<post_id>/', views.post_view)

Solution

  1. Step 1: Choose correct converter for username

    Usernames usually contain letters, numbers, underscores, so 'slug' converter fits best.
  2. Step 2: Confirm integer converter for post ID

    Post ID should be an integer, so <int:post_id> is correct.
  3. Step 3: Evaluate options

    path('profile/<slug:username>/post/<int:post_id>/', views.post_view) uses <slug:username> and <int:post_id>, matching requirements perfectly.
  4. Final Answer:

    path('profile/<slug:username>/post/<int:post_id>/', views.post_view) -> Option A
  5. Quick Check:

    Slug for username + int for post ID = path('profile/<slug:username>/post/<int:post_id>/', views.post_view) [OK]
Hint: Use slug for usernames, int for numeric IDs in URLs [OK]
Common Mistakes:
  • Using str converter which allows spaces
  • Using int converter for username
  • Omitting converters causing string default
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