diff options
| author | Tim Graham <timograham@gmail.com> | 2016-12-19 11:05:48 -0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-12-19 16:18:06 -0500 |
| commit | e233f357bd463df519ca5cd01106f1f59fb5733d (patch) | |
| tree | ec407a3474c4987e0ddd84809c9085235c2c3fa5 | |
| parent | cc0bb07013ed3e7ec58ee6da014ed3094a1a350f (diff) | |
Refs #25484 -- Removed incorrect unquoting in {% static %}.
Regression in 374e6230ca9f9bb84cc9dd760dfb6395fbb5ff0f.
Thanks Florian Apolloner for the report and analysis.
| -rw-r--r-- | django/templatetags/static.py | 4 | ||||
| -rw-r--r-- | tests/staticfiles_tests/storage.py | 5 | ||||
| -rw-r--r-- | tests/staticfiles_tests/test_templatetags.py | 15 |
3 files changed, 20 insertions, 4 deletions
diff --git a/django/templatetags/static.py b/django/templatetags/static.py index 41e6c581ba..0f46fa33da 100644 --- a/django/templatetags/static.py +++ b/django/templatetags/static.py @@ -2,7 +2,7 @@ from django import template from django.apps import apps from django.utils.encoding import iri_to_uri from django.utils.html import conditional_escape -from django.utils.six.moves.urllib.parse import unquote, urljoin +from django.utils.six.moves.urllib.parse import urljoin register = template.Library() @@ -102,7 +102,7 @@ class StaticNode(template.Node): return self.handle_simple(path) def render(self, context): - url = unquote(self.url(context)) + url = self.url(context) if context.autoescape: url = conditional_escape(url) if self.varname is None: diff --git a/tests/staticfiles_tests/storage.py b/tests/staticfiles_tests/storage.py index cf648f06f2..467217ae53 100644 --- a/tests/staticfiles_tests/storage.py +++ b/tests/staticfiles_tests/storage.py @@ -58,6 +58,11 @@ class PathNotImplementedStorage(storage.Storage): raise NotImplementedError +class QueryStringStorage(storage.Storage): + def url(self, path): + return path + '?a=b&c=d' + + class SimpleCachedStaticFilesStorage(CachedStaticFilesStorage): def file_hash(self, name, content=None): diff --git a/tests/staticfiles_tests/test_templatetags.py b/tests/staticfiles_tests/test_templatetags.py index 050f19b179..541b233855 100644 --- a/tests/staticfiles_tests/test_templatetags.py +++ b/tests/staticfiles_tests/test_templatetags.py @@ -1,5 +1,7 @@ from __future__ import unicode_literals +from django.test import override_settings + from .cases import StaticFilesTestCase @@ -8,5 +10,14 @@ class TestTemplateTag(StaticFilesTestCase): def test_template_tag(self): self.assertStaticRenders("does/not/exist.png", "/static/does/not/exist.png") self.assertStaticRenders("testfile.txt", "/static/testfile.txt") - self.assertStaticRenders("test.html?foo=1&bar=2", "/static/test.html?foo=1&bar=2", autoescape=False) - self.assertStaticRenders("test.html?foo=1&bar=2", "/static/test.html?foo=1&bar=2", autoescape=True) + self.assertStaticRenders("special?chars"ed.html", "/static/special%3Fchars%26quoted.html") + + @override_settings(STATICFILES_STORAGE='staticfiles_tests.storage.QueryStringStorage') + def test_template_tag_escapes(self): + """ + Storage.url() should return an encoded path and might be overridden + to also include a querystring. {% static %} escapes the URL to avoid + raw '&', for example. + """ + self.assertStaticRenders('a.html', 'a.html?a=b&c=d') + self.assertStaticRenders('a.html', 'a.html?a=b&c=d', autoescape=False) |
