URL Routing

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 path
  • view → Function or class handling the request
  • kwargs → Extra arguments
  • name → 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.
  • urlpatterns stores 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.