Understanding Django URL Configuration (urls): Routing, Regex, Named Groups, and Reverse URL
This article explains Django's URLconf system, covering regex pattern matching, simple and named group configurations, default view parameters, URL aliases, reverse URL lookup in templates and Python code, and how to include app-specific URL modules for scalable routing.
Django's URL configuration (URLconf) maps URLs to view functions, acting like a directory for the site.
It supports regex string parameters, including simple patterns and named groups. Simple configuration uses url(r'^admin/', admin.site.urls), url(r"^$", views.index), and patterns like url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive) to pass parameters as keyword arguments.
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r"^$", views.index),
url(r"^articles/2003/$", views.special_case_2003),
url(r"^articles/(?P<year>[0-9]{4})/$", views.year_archive),
url(r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$", views.month_archive),
url(r"^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$", views.article_detail),
]Default values can be provided for view parameters, allowing one pattern to supply a default while another captures a value, e.g., a page view with num="1" as default.
url(r'^blog/$', views.page),
url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
# views.py
def page(request, num="1"):
...Aliases (named URL patterns) enable reverse URL lookup, so changing the URL pattern does not require updating templates; use the name argument in url() and the {% url %} template tag or reverse() in Python.
# urls.py
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive, name='news-year-archive')
# template
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
# Python
from django.core.urlresolvers import reverse
return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))Reverse URL lookup works in templates, Python code, and model methods, allowing consistent URL generation across the project.
Including URLs from multiple apps keeps routing manageable; use include() in the project's urlpatterns to delegate to app-specific urls.py files.
from django.conf.urls import include, url
urlpatterns = [
url(r'^blog', include('blog.urls')),
]This modular approach enables scalable and maintainable URL routing for complex Django projects.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
