mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Fixed #25484 -- Made {% static %} render escaped URLs.
This commit is contained in:
parent
33e86b3488
commit
374e6230ca
@ -1,7 +1,8 @@
|
|||||||
from django import template
|
from django import template
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.utils.encoding import iri_to_uri
|
from django.utils.encoding import iri_to_uri
|
||||||
from django.utils.six.moves.urllib.parse import urljoin
|
from django.utils.html import conditional_escape
|
||||||
|
from django.utils.six.moves.urllib.parse import unquote, urljoin
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
@ -101,7 +102,9 @@ class StaticNode(template.Node):
|
|||||||
return self.handle_simple(path)
|
return self.handle_simple(path)
|
||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
url = self.url(context)
|
url = unquote(self.url(context))
|
||||||
|
if context.autoescape:
|
||||||
|
url = conditional_escape(url)
|
||||||
if self.varname is None:
|
if self.varname is None:
|
||||||
return url
|
return url
|
||||||
context[self.varname] = url
|
context[self.varname] = url
|
||||||
|
@ -35,7 +35,7 @@ class BaseStaticFilesMixin(object):
|
|||||||
def render_template(self, template, **kwargs):
|
def render_template(self, template, **kwargs):
|
||||||
if isinstance(template, six.string_types):
|
if isinstance(template, six.string_types):
|
||||||
template = Template(template)
|
template = Template(template)
|
||||||
return template.render(Context(kwargs)).strip()
|
return template.render(Context(**kwargs)).strip()
|
||||||
|
|
||||||
def static_template_snippet(self, path, asvar=False):
|
def static_template_snippet(self, path, asvar=False):
|
||||||
if asvar:
|
if asvar:
|
||||||
|
@ -8,3 +8,5 @@ class TestTemplateTag(StaticFilesTestCase):
|
|||||||
def test_template_tag(self):
|
def test_template_tag(self):
|
||||||
self.assertStaticRenders("does/not/exist.png", "/static/does/not/exist.png")
|
self.assertStaticRenders("does/not/exist.png", "/static/does/not/exist.png")
|
||||||
self.assertStaticRenders("testfile.txt", "/static/testfile.txt")
|
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)
|
||||||
|
@ -50,3 +50,14 @@ class StaticTagTests(SimpleTestCase):
|
|||||||
def test_static_statictag04(self):
|
def test_static_statictag04(self):
|
||||||
output = self.engine.render_to_string('static-statictag04', {'base_css': 'admin/base.css'})
|
output = self.engine.render_to_string('static-statictag04', {'base_css': 'admin/base.css'})
|
||||||
self.assertEqual(output, urljoin(settings.STATIC_URL, 'admin/base.css'))
|
self.assertEqual(output, urljoin(settings.STATIC_URL, 'admin/base.css'))
|
||||||
|
|
||||||
|
@setup({'static-statictag05': '{% load static %}{% static "test.html?foo=1&bar=2" %}'})
|
||||||
|
def test_static_escapes_urls(self):
|
||||||
|
output = self.engine.render_to_string('static-statictag05')
|
||||||
|
self.assertEqual(output, urljoin(settings.STATIC_URL, '/static/test.html?foo=1&bar=2'))
|
||||||
|
|
||||||
|
@setup({'static-statictag06': '{% load static %}'
|
||||||
|
'{% autoescape off %}{% static "test.html?foo=1&bar=2" %}{% endautoescape %}'})
|
||||||
|
def test_static_escapes_urls_autoescape_off(self):
|
||||||
|
output = self.engine.render_to_string('static-statictag06')
|
||||||
|
self.assertEqual(output, urljoin(settings.STATIC_URL, '/static/test.html?foo=1&bar=2'))
|
||||||
|
Loading…
Reference in New Issue
Block a user