Common Regular Expressions for Django URLs
By Justin
A list of common regular expressions for use in Django url's regex. Learn how Python Regular Expressions work as they relate to Django.
Django 2.0 & Up
python
#urls.py
from django.urls import include, path, re_path
from appname.views import (
AboutView,
article_detail,
ContactView,
home_view,
profile_detail,
)
urlpatterns = [
# Examples:
re_path(r'^$', home_view, name='home_with_regex'),
path("/", home_view, name='home_with_path'), # same as the path above it.
re_path(r'^contact/$', ContactView.as_view(), name='contact'),
re_path(r'^about/$', AboutView.as_view(), name='about'),
re_path(r'^profile/(?P<username>[\w.@+-]+)/$', profile_detail, name='profile'),
re_path(r'^article/(?P<slug>[\w-]+)/$', article_detail, name='article'),
re_path(r'^blog/', include("blog.urls")),
re_path(r'^admin/', admin.site.urls),
]
# blog.urls.py
from django.urls import include, path, re_path
from django.views.generic import RedirectView, TemplateView
from .views import BlogList, BlogDetail
app_name = 'blog'
urlpatterns = [
re_path(r'^$', BlogList.as_view(), name='list'),
re_path(r'^(?P<slug>[\w-]+)/$', BlogDetail.as_view, name='detail'),
]
Notice blog.urls.py, see how there's the app_name variable? This is set inside of urls.py for apps and for creating namespace urls which allows to call reverse like reverse("<namespace>:<url-name>").
A few examples of reversing a url:
- reverse("blog:detail", kwargs={"slug": "ommon-regular-expressions-for-django-urls"})
- reverse("blog:list")
Django 1.9 to Django 1.11 (required in Django 1.10+)
python
#urls.py
from django.conf.urls import url, include
from appname.views import (
AboutView,
article_detail,
ContactView,
home_view,
profile_detail,
)
urlpatterns = [
# Examples:
url(r'^$', home_view, name='home'),
url(r'^contact/$', ContactView.as_view(), name='contact'),
url(r'^about/$', AboutView.as_view(), name='about'),
url(r'^profile/(?P<username>[\w.@+-]+)/$', profile_detail, name='profile'),
url(r'^article/(?P<slug>[\w-]+)/$', article_detail, name='article'),
url(r'^blog/', include("blog.urls")),
url(r'^admin/', admin.site.urls),
]
Django 1.8 and below
python
# urls.py
from appname.views import (
AboutView,
ContactView,
)
urlpatterns = patterns('',
url(r'^$', 'appname.views.home_view', name='home'),
url(r'^contact/$', ContactView.as_view(), name='contact'),
url(r'^about/$', AboutView.as_view(), name='about'),
url(r'^profile/(?P<username>[\w.@+-]+)/$', 'appname.views.profile_detail', name='profile'),
url(r'^article/(?P<slug>[\w-]+)/$', 'appname.views.article_detail', name='article'),
url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
)
Username (user's username)
Regex:
(?P<username>[\w.@+-]+)
Example:
Parameters:
python
username = '[email protected]'
or
username = 'myusername' ## this paramater can be either email or username fields
Query:
python
object = UserModel.objects.get(username=username)
Url:
url(?P<username>[\w.@+-]+)$', 'appname.views.show_user'),
View:
python
def show_user(request, username):
...
return ...
Live usage:
yourdomain.com/[email protected]/
or
yourdomain.com/myusername/
Object ID (user id, profile id, group id, etc)
Regex:
(?P<order>\d+)
Example
Parameters:
python
id = 1
Query:
python
object = Model.objects.get(id=id)
Url:
url(r'^(?P<id>\d+)$', 'appname.views.item_id'),
View:
python
def item_id(request,id):
...
return ...
Live usage:
yourdomain.com/12/
Username with Object Order
Regex:
(?P<username>[\w.@+-]+)/(?P<order>\d+)
Example
Parameters:
python
username = "myusername"
order = 13
Query:
python
user_object = UserModel.objects.get(username=username)
queryset = UserItem.objects.filter(order=order, user=user)
Url:
url(r'^(?P<username>[\w.@+-]+)/(?P<order>\d+)/$', 'appname.views.item_home', name='home'),
View:
python
def item_home(request, username, order):
...
return ...
Live usage:
yourdomain.com/useritem/myusername/13/
Slugs
Regex:
(?P<slug>[\w-]+)
Example
Parameters:
python
slug = "slugged-item"
Query:
python
object = Articles.objects.get(slug=slug)
Url:
url(r'^(?P<slug>[\w-]+)/$', 'appname.views.article'),
View:
python
def article(request,article):
...
return ...
Live usage:
yourdomain.com/your-slug/
Digits and Dates (through digits)
Regex:
4 Digits like 2015
(?P<year>\d{4})
2 Digits like 12
(?P<month>\d{2})
Any Digits like 1231 or 123438192
(?P<article_id>\d+)
Example
Parameters:
python
year = 2015
month = 01
article_id = 412
Query:
python
year_queryset = Articles.objects.filter(year=year)
months_in_year_queryset = Articles.objects.filter(year=year).filter(month=month)
article_object = Articles.objects.get(id=article_id)
Url:
(r'^articles/(?P<year>\d{4})/$', views.year_archive),
(r'^articles/(\d{4})/(?P<month>\d{2})/$', views.month_archive),
(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<article_id>\d+)/$', views.article_detail),
View:
python
def year_archive(request, year):
return ..
def month_archive(request, month):
return ..
def article_detail(request, year, month, article_id):
...
return ...
Live usage:
yourdomain.com/2015/
yourdomain.com/2015/03/
yourdomain.com/2015/03/21/
If you find other regular expressions you are unsure of their meaning, feel free to contact us or comment below..
Thank you!
Justin
Coding for Entrepreneurs