From 34af2bc523321da828a02bcf8f225ec393ed75cf Mon Sep 17 00:00:00 2001 From: Marten Kenbeek Date: Mon, 26 Oct 2015 14:28:05 +0100 Subject: [PATCH] Fixed #25610 -- Reverted removal of request.current_app in {% url %} tag. The deprecation removal in 5e450c52aafb62b9d83c8ac08892e0b92cbec4aa removed too much. --- django/template/defaulttags.py | 7 +++++-- tests/template_tests/syntax_tests/test_url.py | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 08ef976be12..2934f5756e4 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -434,9 +434,12 @@ class URLNode(Node): } view_name = self.view_name.resolve(context) try: - current_app = context.request.resolver_match.namespace + current_app = context.request.current_app except AttributeError: - current_app = None + try: + current_app = context.request.resolver_match.namespace + except AttributeError: + current_app = None # Try to look up the URL. If it fails, raise NoReverseMatch unless the # {% url ... as var %} construct is used, in which case return nothing. url = '' diff --git a/tests/template_tests/syntax_tests/test_url.py b/tests/template_tests/syntax_tests/test_url.py index 689ffc8c084..53b3f255185 100644 --- a/tests/template_tests/syntax_tests/test_url.py +++ b/tests/template_tests/syntax_tests/test_url.py @@ -251,3 +251,23 @@ class UrlTagTests(SimpleTestCase): context = RequestContext(request) output = template.render(context) self.assertEqual(output, '/ns2/named-client/42/') + + @setup({'url-namespace-no-current-app': '{% url "app:named.client" 42 %}'}) + def test_url_namespace_no_current_app(self): + request = RequestFactory().get('/') + request.resolver_match = resolve('/ns1/') + request.current_app = None + template = self.engine.get_template('url-namespace-no-current-app') + context = RequestContext(request) + output = template.render(context) + self.assertEqual(output, '/ns2/named-client/42/') + + @setup({'url-namespace-explicit-current-app': '{% url "app:named.client" 42 %}'}) + def test_url_namespace_explicit_current_app(self): + request = RequestFactory().get('/') + request.resolver_match = resolve('/ns1/') + request.current_app = 'app' + template = self.engine.get_template('url-namespace-explicit-current-app') + context = RequestContext(request) + output = template.render(context) + self.assertEqual(output, '/ns2/named-client/42/')