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.