#31069: Change in behavior for optional re matches
------------------------------------------+------------------------
Reporter: Terence Honles | Owner: nobody
Type: Bug | Status: new
Component: Core (URLs) | Version: 3.0
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------+------------------------
I am mainly pointing this out as it probably should have been called out
as a breaking change from Django 2.X to 3.X (And I think the release notes
should probably be adjusted if the old functionality is not to be
restored). You can probably argue either way about if this is a bug since
it's coming from re's `match.groupdict()`. It's related to
https://code.djangoproject.com/ticket/31061 and caused by
https://code.djangoproject.com/ticket/26431 /
https://github.com/django/django/pull/11477
The test is the following:
{{{
from django.urls import re_path
def view(request, optional1, optional2): ...
urlpatterns = [
re_path(r'^(?P<optional1>\w+/)(?:(?P<optional2>\w+)/)', view)
]
}}}
For Django 2.X this would work as expected because named captures are
returned even if they are `None`, however in Django 3.0 this would raise
an error because positional parameter `optional2` is no longer provided.
(i.e. `view() missing 1 required positional argument: 'optional2'`)
You can argue that `optional2` should actually have had a default all
along, but it didn't before and code may unexpectedly break because it is
now required.
I'm not very familiar with https://code.djangoproject.com/ticket/26431,
but I think if possible it probably should have been fixed at a different
level.
--
Ticket URL: <https://code.djangoproject.com/ticket/31069>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/056.af0f95973e63ac5b5ade3595ed5dcec7%40djangoproject.com.