URL Routing is the process of mapping a URL to a specific view function or class. When a user visits a URL, Django checks the URL patterns and executes the corresponding view.
What is URL Routing?
For example:
URL View
-----------------------------------
/ home
/about/ about
/contact/ contact
/products/ products
When a user visits /about/, Django calls the about view.
URL Configuration
Django stores URL patterns inside the urls.py file.
Example:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns is a list that contains all URL routes.
Creating Your First URL
views.py
from django.http import HttpResponse
def home(request):
return HttpResponse("Welcome to Django")
urls.py
from django.urls import path
from .views import home
urlpatterns = [
path('', home),
]
Now visiting:
http://127.0.0.1:8000/
will display:
Welcome to Django
URL Pattern Syntax
path(route, view, kwargs=None, name=None)
Parameters
route→ URL pathview→ Function or class handling the requestkwargs→ Extra argumentsname→ Unique URL name
Example:
path('about/', about, name='about')
Multiple URLs
from django.urls import path
from .views import home, about, contact
urlpatterns = [
path('', home),
path('about/', about),
path('contact/', contact),
]
App-Level URLs
Create a urls.py file inside your app.
blog/urls.py
from django.urls import path
from .views import home
urlpatterns = [
path('', home),
]
Project urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
Now:
http://127.0.0.1:8000/blog/
will load the blog app URLs.
Why Use include()?
include() helps separate URLs for different apps.
Example:
Project
│
├── Users App URLs
├── Products App URLs
├── Orders App URLs
└── Blog App URLs
This keeps the project organized.
Named URLs
path('about/', about, name='about')
Template:
<a href="{% url 'about' %}">About</a>
Benefits:
- Avoid hardcoding URLs
- Easier maintenance
- Better scalability
URL Resolution Flow
User Request
↓
Project urls.py
↓
App urls.py
↓
View
↓
Response
Key Takeaway
- URLs connect user requests to views.
path()is used to define routes.urlpatternsstores all URL patterns.include()helps organize app-specific URLs.- Named URLs improve maintainability.
- Django checks URLs from top to bottom and executes the first matching route.