Django

Lesson 01

URL pattern order

Put specific URL patterns before broad dynamic patterns so Django routes requests to the intended view.

Good Code

reviews/urls.py
from django.urls import path

from . import views

app_name = "reviews"

urlpatterns = [
    path("settings/", views.review_settings, name="settings"),
    path("<slug:username>/", views.reviewer_profile, name="profile"),
]

Bad Code

reviews/urls.py
from django.urls import path

from . import views

app_name = "reviews"

urlpatterns = [
    path("<slug:username>/", views.reviewer_profile, name="profile"),
    path("settings/", views.review_settings, name="settings"),
]

Review Notes

What to review

Good Code

The good version makes the fixed settings route win before the broad profile route can capture the same path segment.

Bad Code

The bad version makes settings/ look like a username. The view might run with the wrong assumptions, and the route table becomes harder to scan.

Takeaways

  • Django checks URL patterns in order, so route order is application behavior.