summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/template/defaulttags.py7
-rw-r--r--tests/template_tests/syntax_tests/test_url.py20
2 files changed, 25 insertions, 2 deletions
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 08ef976be1..2934f5756e 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 689ffc8c08..53b3f25518 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/')