summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRyan Rubin <ryanmrubin@gmail.com>2018-05-25 10:11:46 -0500
committerTim Graham <timograham@gmail.com>2018-05-25 11:12:03 -0400
commit6b91152a103f7c5cbefcf44741e6b03611724714 (patch)
tree79114dff2ab4fcd1d007f522c6bad0dcd29f6b58 /tests
parent3cca2ab2e7d32eea46ad615b18f7ac1812dbd85b (diff)
[2.1.x] Fixed #29400 -- Fixed crash in custom template filters that use decorated functions.
Regression in 620e9dd31a2146d70de740f96a8cb9a6db054fc7. Backport of a8d12bc28069d56e0306770ab9c73738293663f7 from master
Diffstat (limited to 'tests')
-rw-r--r--tests/template_tests/templatetags/custom.py8
-rw-r--r--tests/template_tests/test_custom.py5
2 files changed, 13 insertions, 0 deletions
diff --git a/tests/template_tests/templatetags/custom.py b/tests/template_tests/templatetags/custom.py
index 2e2ccf3782..45acd9655e 100644
--- a/tests/template_tests/templatetags/custom.py
+++ b/tests/template_tests/templatetags/custom.py
@@ -3,6 +3,7 @@ import operator
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.html import escape, format_html
+from django.utils.safestring import mark_safe
register = template.Library()
@@ -14,6 +15,13 @@ def trim(value, num):
@register.filter
+@mark_safe
+def make_data_div(value):
+ """A filter that uses a decorator (@mark_safe)."""
+ return '<div data-name="%s"></div>' % value
+
+
+@register.filter
def noop(value, param=None):
"""A noop filter that always return its first argument and does nothing with
its second (optional) one.
diff --git a/tests/template_tests/test_custom.py b/tests/template_tests/test_custom.py
index b37b5f8f1e..dbc5bc267d 100644
--- a/tests/template_tests/test_custom.py
+++ b/tests/template_tests/test_custom.py
@@ -25,6 +25,11 @@ class CustomFilterTests(SimpleTestCase):
"abcde"
)
+ def test_decorated_filter(self):
+ engine = Engine(libraries=LIBRARIES)
+ t = engine.from_string('{% load custom %}{{ name|make_data_div }}')
+ self.assertEqual(t.render(Context({'name': 'foo'})), '<div data-name="foo"></div>')
+
class TagTestCase(SimpleTestCase):