📖 Scenario: You are building a simple Django web app that shows details for different products. Each product has a unique ID number. You want to create a URL pattern that captures this product ID from the URL using angle brackets.
🎯 Goal: Build a Django URL pattern that uses angle brackets to capture a product ID as a URL parameter, and create a simple view function that receives this parameter and returns a response showing the product ID.
📋 What You'll Learn
Create a URL pattern in urls.py using angle brackets to capture an integer parameter called product_id
Create a view function called product_detail in views.py that accepts product_id as an argument
Return an HTTP response from the view that includes the product_id in the text
Connect the URL pattern to the product_detail view
💡 Why This Matters
🌍 Real World
Capturing URL parameters is essential for building dynamic web pages that show different content based on user input or links.
💼 Career
Understanding Django URL routing and parameter capturing is a key skill for backend web developers working with Django.
Progress0 / 4 steps
1
Create the URL pattern dictionary
In urls.py, create a list called urlpatterns with one entry: a call to path with the route '' (empty string), the view product_detail, and the name 'product_detail'. Import path from django.urls and product_detail from views.
Django
Hint
Remember to import path and your view function before creating urlpatterns.
2
Add the URL parameter with angle brackets
Modify the path in urlpatterns to capture an integer parameter called product_id using angle brackets. Change the route from '' to 'product//'.
Django
Hint
Use <int:product_id> inside the route string to capture the integer parameter.
3
Create the view function to accept the parameter
In views.py, define a function called product_detail that takes request and product_id as parameters. Return an HttpResponse with the text "Product ID: {product_id}" using an f-string. Import HttpResponse from django.http.
Django
Hint
Make sure your function accepts product_id and uses it inside the response text.
4
Connect the URL pattern and view
Ensure that urls.py imports product_detail from views and that the urlpatterns list includes the path 'product//' connected to product_detail. This completes the URL parameter setup.
Django
Hint
Double-check your imports and that the URL pattern matches the view function.
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
Step 1: Understand angle brackets in Django URLs
Angle brackets capture parts of the URL as variables to pass to views.
Step 2: Recognize the converter and variable name
The syntax <int:id> captures an integer named 'id'.
Final Answer:
Captures a part of the URL as an integer variable named 'id'. -> Option D
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
Step 1: Identify correct converter and variable order
The correct syntax is <converter:variable_name>, so <slug:post_slug> is correct.
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.
Final Answer:
path('post/<slug:post_slug>/', views.post_detail) -> Option B
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
Step 1: Understand the int converter effect
The <int:user_id> converter converts the URL segment to an integer.
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.
Final Answer:
The integer 42 -> Option C
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
Step 1: Check angle bracket syntax
The pattern uses <int:id> without the closing '>' character, which is invalid syntax.
Step 2: Confirm correct syntax
The correct syntax requires both opening and closing angle brackets: <int:id>.
Final Answer:
Missing closing angle bracket '>' after 'id'. -> Option A
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
Step 1: Choose correct converter for username
Usernames usually contain letters, numbers, underscores, so 'slug' converter fits best.
Step 2: Confirm integer converter for post ID
Post ID should be an integer, so <int:post_id> is correct.
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.
Final Answer:
path('profile/<slug:username>/post/<int:post_id>/', views.post_view) -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.