📖 Scenario: You are building a Django website with multiple apps. Each app has its own URLs. You want to connect these app URLs to the main project so the website works correctly.
🎯 Goal: Learn how to include app URLs inside the main project's URL configuration using Django's include() function.
📋 What You'll Learn
Create a Django project-level urls.py file
Create an app-level urls.py file with URL patterns
Use include() to connect app URLs in the project URLs
Use exact variable and function names as instructed
💡 Why This Matters
🌍 Real World
In real Django projects, apps have their own URLs. Including them in the main project URLs keeps code organized and modular.
💼 Career
Understanding how to include app URLs is essential for Django web developers to build scalable and maintainable websites.
Progress0 / 4 steps
1
Create app-level URLs
Create a file called urls.py inside the app folder. Define a variable called app_name and set it to 'blog'. Then create a list called urlpatterns with one URL pattern: path '' mapped to a view function called home.
Django
Hint
Use app_name = 'blog' and urlpatterns = [path('', views.home, name='home')].
2
Create project-level URLs
In the project folder, open urls.py. Import path and include from django.urls. Create a list called urlpatterns but leave it empty for now.
Django
Hint
Import include and create urlpatterns = [].
3
Include app URLs in project URLs
Add a path to urlpatterns that uses path('blog/', include('blog.urls')) to include the app URLs under the /blog/ URL prefix.
Django
Hint
Use path('blog/', include('blog.urls')) inside urlpatterns.
4
Complete project URLs with admin path
Add the Django admin path path('admin/', admin.site.urls) to urlpatterns. Import admin from django.contrib at the top.
Django
Hint
Import admin and add path('admin/', admin.site.urls) to urlpatterns.
Practice
(1/5)
1. What is the main purpose of including app URLs in a Django project?
easy
A. To speed up the server response time
B. To connect the database with the views
C. To automatically generate HTML templates
D. To organize URL patterns by app for better project structure
Solution
Step 1: Understand URL organization in Django
Including app URLs helps keep URL patterns separated by app, making the project easier to manage.
Step 2: Identify the main benefit
This separation improves project structure and maintainability, not server speed or template generation.
Final Answer:
To organize URL patterns by app for better project structure -> Option D
Quick Check:
URL organization = To organize URL patterns by app for better project structure [OK]
Hint: Including app URLs organizes routes by app for clarity [OK]
Common Mistakes:
Thinking it improves server speed
Confusing URL inclusion with template creation
Assuming it connects database automatically
2. Which of the following is the correct syntax to include app URLs under the prefix 'blog/' in the main urls.py?
easy
A. include('blog.urls', path='blog/')
B. path('blog/', include('blog.urls'))
C. path('blog/', url('blog.urls'))
D. include(path('blog/'), 'blog.urls')
Solution
Step 1: Recall Django URL inclusion syntax
The correct way is to use path('prefix/', include('app.urls')).
Step 2: Match syntax with options
path('blog/', include('blog.urls')) matches the correct syntax exactly; others misuse include or path functions.
Final Answer:
path('blog/', include('blog.urls')) -> Option B
Quick Check:
Correct include syntax = path('blog/', include('blog.urls')) [OK]
Hint: Use path('prefix/', include('app.urls')) format [OK]
Common Mistakes:
Swapping order of path and include
Using url() instead of include()
Passing path as argument to include
3. Given the main urls.py includes path('shop/', include('shop.urls')) and the app shop/urls.py has path('items/', views.items_list), what URL path will call items_list view?
medium
A. /shop/items/
B. /items/
C. /shop/
D. /shop/items_list/
Solution
Step 1: Combine main and app URL prefixes
Main URL adds 'shop/' prefix, app URL adds 'items/' path.
Step 2: Form full URL path
Joining them gives '/shop/items/' which calls the items_list view.
Final Answer:
/shop/items/ -> Option A
Quick Check:
Combined URL = /shop/items/ [OK]
Hint: Combine main prefix + app path for full URL [OK]
Common Mistakes:
Using only app path ignoring main prefix
Confusing view name with URL path
Adding extra slashes or missing trailing slash
4. What is wrong with this main urls.py snippet?
from django.urls import path
urlpatterns = [
path('blog/', 'blog.urls'),
]
medium
A. Missing include() function around 'blog.urls'
B. Should import url instead of path
C. The string 'blog.urls' should be a list
D. The path prefix 'blog/' is invalid
Solution
Step 1: Check how to include app URLs
App URLs must be included using include('app.urls'), not just a string.
Step 2: Identify missing include()
The code uses a string directly without include(), causing an error.
Final Answer:
Missing include() function around 'blog.urls' -> Option A
Quick Check:
Include required for app URLs = Missing include() function around 'blog.urls' [OK]
Hint: Always wrap app URLs with include() [OK]
Common Mistakes:
Passing string directly without include()
Confusing path and url imports
Thinking prefix 'blog/' is invalid
5. You want to include two apps, 'store' and 'accounts', in your project URLs under prefixes 'shop/' and 'user/' respectively. Which is the correct way to do this in the main urls.py?
hard
A. path('shop/', 'store.urls')\npath('user/', 'accounts.urls')
B. include('store.urls', prefix='shop/')\ninclude('accounts.urls', prefix='user/')
C. path('shop/', include('store.urls'))\npath('user/', include('accounts.urls'))
D. path('store/', include('shop.urls'))\npath('accounts/', include('user.urls'))
Solution
Step 1: Use path() with include() for each app
Each app URL must be included with path('prefix/', include('app.urls')).
Step 2: Match prefixes and app names correctly
path('shop/', include('store.urls'))\npath('user/', include('accounts.urls')) correctly uses 'shop/' for 'store.urls' and 'user/' for 'accounts.urls'. Others misuse include or swap names.
Final Answer:
path('shop/', include('store.urls'))
path('user/', include('accounts.urls')) -> Option C