Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions rest_framework/versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,10 @@ def determine_version(self, request, *args, **kwargs):

def reverse(self, viewname, args=None, kwargs=None, request=None, format=None, **extra):
if request.version is not None:
kwargs = {} if (kwargs is None) else kwargs
kwargs[self.version_param] = request.version
kwargs = {
self.version_param: request.version,
**(kwargs or {})
}

return super().reverse(
viewname, args, kwargs, request, format, **extra
Expand Down
11 changes: 11 additions & 0 deletions tests/test_versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,12 @@ class TestURLReversing(URLPatternsTestCase, APITestCase):
]

urlpatterns = [

Comment thread
auvipy marked this conversation as resolved.
Outdated
path('v1/', include((included, 'v1'), namespace='v1')),
path('another/', dummy_view, name='another'),
re_path(r'^(?P<version>[v1|v2]+)/another/$', dummy_view, name='another'),
re_path(r'^(?P<foo>.+)/unversioned/$', dummy_view, name='unversioned'),

]

def test_reverse_unversioned(self):
Expand Down Expand Up @@ -198,6 +201,14 @@ def test_reverse_url_path_versioning(self):
response = view(request)
assert response.data == {'url': 'http://testserver/another/'}

# Test fallback when kwargs is not None
request = factory.get('/v1/endpoint/')
request.versioning_scheme = scheme()
request.version = 'v1'

reversed_url = reverse('unversioned', request=request, kwargs={'foo': 'bar'})
assert reversed_url == 'http://testserver/bar/unversioned/'

def test_reverse_namespace_versioning(self):
class FakeResolverMatch:
namespace = 'v1'
Expand Down