diff options
| author | Robert Roskam <raiderrobert@gmail.com> | 2016-11-05 10:48:31 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-02-11 08:58:40 -0500 |
| commit | 98bcc5d81bca578f3a5b4d47907ba4ac40446887 (patch) | |
| tree | 16f686641a20a3068ddddae879bb8006db3493e4 /tests | |
| parent | fb5bd38e3b83c7f0d1011de80f922fc34faf740b (diff) | |
Fixed #27367 -- Doc'd and tested reversing of URLs with the same name.
Thanks Reinout van Rees for contributing to the patch.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/urlpatterns_reverse/named_urls_conflict.py | 17 | ||||
| -rw-r--r-- | tests/urlpatterns_reverse/tests.py | 17 |
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/named_urls_conflict.py b/tests/urlpatterns_reverse/named_urls_conflict.py new file mode 100644 index 0000000000..0c0c6eb47e --- /dev/null +++ b/tests/urlpatterns_reverse/named_urls_conflict.py @@ -0,0 +1,17 @@ +from django.conf.urls import url + +from .views import empty_view + +urlpatterns = [ + # No kwargs + url(r'^conflict/cannot-go-here/$', empty_view, name='name-conflict'), + url(r'^conflict/$', empty_view, name='name-conflict'), + # One kwarg + url(r'^conflict-first/(?P<first>\w+)/$', empty_view, name='name-conflict'), + url(r'^conflict-cannot-go-here/(?P<middle>\w+)/$', empty_view, name='name-conflict'), + url(r'^conflict-middle/(?P<middle>\w+)/$', empty_view, name='name-conflict'), + url(r'^conflict-last/(?P<last>\w+)/$', empty_view, name='name-conflict'), + # Two kwargs + url(r'^conflict/(?P<another>\w+)/(?P<extra>\w+)/cannot-go-here/$', empty_view, name='name-conflict'), + url(r'^conflict/(?P<extra>\w+)/(?P<another>\w+)/$', empty_view, name='name-conflict'), +] diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py index c4c1c9775d..f013d30e15 100644 --- a/tests/urlpatterns_reverse/tests.py +++ b/tests/urlpatterns_reverse/tests.py @@ -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 |
