@@ -55,6 +55,45 @@ def test_default_if_none_preserves_html_safe_value(assert_render):
5555 )
5656
5757
58+ @pytest .mark .parametrize (
59+ "template,context,expected" ,
60+ [
61+ pytest .param (
62+ "{% autoescape on %}{{ value|default_if_none:'default' }}{% endautoescape %}" ,
63+ {"value" : "<b>html</b>" },
64+ "<b>html</b>" ,
65+ id = "autoescape_html_value" ,
66+ ),
67+ pytest .param (
68+ "{% autoescape on %}{{ value|default_if_none:default }}{% endautoescape %}" ,
69+ {"value" : None , "default" : "<b>default</b>" },
70+ "<b>default</b>" ,
71+ id = "autoescape_html_default_variable" ,
72+ ),
73+ pytest .param (
74+ "{{ value|default_if_none:'<b>default</b>'|escape }}" ,
75+ {"value" : None },
76+ "<b>default</b>" ,
77+ id = "explicit_default_str_literal_never_escaped" ,
78+ ),
79+ pytest .param (
80+ "{{ value|default_if_none:default|escape }}" ,
81+ {"value" : None , "default" : "<b>default</b>" },
82+ "<b>default</b>" ,
83+ id = "explicit_escape_html_default_variable" ,
84+ ),
85+ pytest .param (
86+ "{% autoescape on %}{{ value|default_if_none:default|safe }}{% endautoescape %}" ,
87+ {"value" : None , "default" : "<b>default</b>" },
88+ "<b>default</b>" ,
89+ id = "safe_prevents_escape_default" ,
90+ ),
91+ ],
92+ )
93+ def test_default_if_none_html_escaping (assert_render , template , context , expected ):
94+ assert_render (template = template , context = context , expected = expected )
95+
96+
5897def test_default_if_none_with_forloop_variable (assert_render ):
5998 template = "{% for x in items %}{{ x|default_if_none:forloop.counter }}{% endfor %}"
6099 assert_render (
0 commit comments