1
0
mirror of https://github.com/django/django.git synced 2025-10-23 21:59:11 +00:00

Fixed #27367 -- Doc'd and tested reversing of URLs with the same name.

Thanks Reinout van Rees for contributing to the patch.
This commit is contained in:
Robert Roskam
2016-11-05 10:48:31 -04:00
committed by Tim Graham
parent fb5bd38e3b
commit 98bcc5d81b
3 changed files with 54 additions and 7 deletions

View File

@@ -386,6 +386,23 @@ class ResolverTests(SimpleTestCase):
self.assertEqual(resolver.reverse('named-url2', 'arg'), 'extra/arg/')
self.assertEqual(resolver.reverse('named-url2', extra='arg'), 'extra/arg/')
def test_resolver_reverse_conflict(self):
"""
url() name arguments don't need to be unique. The last registered
pattern takes precedence for conflicting names.
"""
resolver = get_resolver('urlpatterns_reverse.named_urls_conflict')
# Without arguments, the last URL in urlpatterns has precedence.
self.assertEqual(resolver.reverse('name-conflict'), 'conflict/')
# With an arg, the last URL in urlpatterns has precedence.
self.assertEqual(resolver.reverse('name-conflict', 'arg'), 'conflict-last/arg/')
# With a kwarg, other url()s can be reversed.
self.assertEqual(resolver.reverse('name-conflict', first='arg'), 'conflict-first/arg/')
self.assertEqual(resolver.reverse('name-conflict', middle='arg'), 'conflict-middle/arg/')
self.assertEqual(resolver.reverse('name-conflict', last='arg'), 'conflict-last/arg/')
# The number and order of the arguments don't interfere with reversing.
self.assertEqual(resolver.reverse('name-conflict', 'arg', 'arg'), 'conflict/arg/arg/')
def test_non_regex(self):
"""
A Resolver404 is raised if resolving doesn't meet the basic