Routing (URLs)
Defining URLs
Define URL patterns in each app's urls.py and include them in the project's main urls.py. Use Django's path() and re_path() for clean, readable routes.
Example:
# app/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('users/', views.user_list, name='user_list'),
path('users/<int:id>/', views.user_detail, name='user_detail'),
]
URL Naming
Use descriptive, unique names for URL patterns. This enables reverse URL resolution and improves maintainability.
Example:
path('invoices/', views.invoice_list, name='invoice_list')
URL Patterns
Group related URLs in app-specific urls.py files. Include app URLs in the main project urls.py using include().
Example:
# project/urls.py
from django.urls import path, include
urlpatterns = [
path('users/', include('users.urls')),
path('invoices/', include('invoices.urls')),
]
Middleware
Use middleware for cross-cutting concerns (authentication, logging, security). Register middleware in settings.py under MIDDLEWARE.
Example:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# ...other middleware...
]
Best Practices
- Use named URLs for reverse resolution in templates and views.
- Avoid hardcoding URLs; use
reverse()and{% url %}template tag. - Organize URLs by app and feature for clarity.
- Document custom middleware and its purpose.