Making a Regex Django URL Token Optional
30,657
Solution 1
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)(?:/(?P<title>[a-zA-Z]+))?/$','some_method'),
Don't forget to give title
a default value in the view.
Solution 2
In case your are looking for multiple optional arguments, without any required ones, just omit "/" at the beginning, such as:
re_path(r'^view(?:/(?P<dummy1>[a-zA-Z]+))?(?:/(?P<dummy2>[a-zA-Z]+))?(?:/(?P<dummy3>[a-zA-Z]+))?/$', views.MyView.as_view(), name='myname'),
which you can browse at:
http://localhost:8000/view/?dummy1=value1&dummy2=value2&dummy3=value3
Related videos on Youtube
![Federer](https://i.stack.imgur.com/i895E.jpg?s=256&g=1)
Author by
Federer
Updated on October 03, 2020Comments
-
Federer almost 4 years
You have a URL which accepts a
first_name
andlast_name
in Django:('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/$','some_method'),
How would you include the OPTIONAL URL token of
title
, without creating any new lines. What I mean by this is, in an ideal scenario:#A regex constant OP_REGEX = r'THIS IS OPTIONAL<title>[a-z]' #Ideal URL ('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/OP_REGEX/$','some_method'),
Is this possible without creating a new line i.e.
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),
-
Federer over 14 yearsthanks for that. How would I make a URL of JUST optional '
titles
'? i.e.(?:/(?P<title1>[a-zA-Z]+))?(?:/(?P<title2>[a-zA-Z]+))?
thanks for any help -
Chris over 11 yearsNote that the ?: is important in the outer group. Without it, the URL will work properly when navigated to, but reverse() won't notice the argument inside.
-
srus over 7 yearsMore info about this in the official docs.