URL Configuration
Master Django's URL routing system to map requests to views and handle dynamic URLs.
55 min•By Priygop Team•Last updated: Feb 2026
URL Routing in Django
Django uses URL patterns to route requests to the appropriate views. Understanding URL configuration is essential for building web applications.
URL Patterns
Example
# myproject/urls.py (Main URL configuration)
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # Include app URLs
path('', include('home.urls')), # Home page URLs
]
# Serve static and media files in development
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# blog/urls.py (App-specific URLs)
from django.urls import path
from . import views
app_name = 'blog' # URL namespace
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
path('post/new/', views.post_new, name='post_new'),
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
]
# home/urls.py (Home page URLs)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about/', views.about, name='about'),
path('contact/', views.contact, name='contact'),
]
# URL Patterns with Parameters
# Integer parameters
path('post/<int:pk>/', views.post_detail, name='post_detail'),
# String parameters
path('category/<str:category>/', views.category_posts, name='category_posts'),
# Slug parameters
path('post/<slug:slug>/', views.post_detail, name='post_detail'),
# UUID parameters
path('user/<uuid:user_id>/', views.user_profile, name='user_profile'),
# Multiple parameters
path('post/<int:year>/<int:month>/<slug:slug>/', views.post_detail, name='post_detail'),Practice Exercise: Dynamic URL Router
Example
# Dynamic URL Router for Django
from django.urls import path, re_path
from django.http import HttpResponse
from django.views.generic import TemplateView
class DynamicRouter:
"""A dynamic URL router that can generate URLs based on patterns"""
def __init__(self):
self.routes = {}
def add_route(self, pattern, view_func, name=None):
"""Add a new route pattern"""
self.routes[pattern] = {
'view': view_func,
'name': name or pattern
}
def get_urlpatterns(self):
"""Convert routes to Django URL patterns"""
urlpatterns = []
for pattern, route_info in self.routes.items():
# Convert pattern to Django path
if '<' in pattern and '>' in pattern:
# Dynamic parameter pattern
django_pattern = self._convert_pattern(pattern)
urlpatterns.append(
path(django_pattern, route_info['view'], name=route_info['name'])
)
else:
# Static pattern
urlpatterns.append(
path(pattern, route_info['view'], name=route_info['name'])
)
return urlpatterns
def _convert_pattern(self, pattern):
"""Convert custom pattern to Django URL pattern"""
# Example: /user/{id}/profile -> /user/<int:id>/profile
import re
# Replace {param} with <type:param>
pattern = re.sub(r'\{([^}]+)\}', r'<str:\1>', pattern)
# Add type hints for common patterns
pattern = re.sub(r'<str:id>', '<int:id>', pattern)
pattern = re.sub(r'<str:pk>', '<int:pk>', pattern)
pattern = re.sub(r'<str:slug>', '<slug:slug>', pattern)
return pattern
# Example usage
def user_profile(request, user_id):
return HttpResponse(f"User Profile: {user_id}")
def post_detail(request, post_id):
return HttpResponse(f"Post Detail: {post_id}")
def category_posts(request, category):
return HttpResponse(f"Category: {category}")
# Create router and add routes
router = DynamicRouter()
router.add_route('user/{id}/profile', user_profile, 'user_profile')
router.add_route('post/{id}', post_detail, 'post_detail')
router.add_route('category/{category}', category_posts, 'category_posts')
# Generate URL patterns
urlpatterns = router.get_urlpatterns()
# This would be used in your urls.py like:
# from .router import urlpatterns
# urlpatterns += urlpatterns