diff --git a/src/filters.rs b/src/filters.rs index 07bb937a..734eb2a4 100644 --- a/src/filters.rs +++ b/src/filters.rs @@ -30,17 +30,19 @@ impl ResolveFilter for AddSlashesFilter { fn resolve<'t, 'py>( &self, variable: Option>, - _py: Python<'py>, + py: Python<'py>, _template: TemplateString<'t>, - context: &mut Context, + _context: &mut Context, ) -> TemplateResult<'t, 'py> { let content = match variable { - Some(content) => content - .render(context)? - .replace(r"\", r"\\") - .replace("\"", "\\\"") - .replace("'", r"\'") - .into_content(), + Some(content) => { + let content = content.to_py(py).str()?.extract::()?; + content + .replace(r"\", r"\\") + .replace("\"", "\\\"") + .replace("'", r"\'") + .into_content() + } None => "".into_content(), }; Ok(content) diff --git a/tests/filters/test_addslashes.py b/tests/filters/test_addslashes.py index b0268dab..f280621b 100644 --- a/tests/filters/test_addslashes.py +++ b/tests/filters/test_addslashes.py @@ -25,18 +25,12 @@ def test_addslashes01(self): self.assertEqual(output, r"\' \'") -@pytest.mark.xfail(reason="autoescape not there yet") -def test_addslashes02(self): - """@setup({"addslashes02": "{{ a|addslashes }} {{ b|addslashes }}"})""" +def test_addslashes02(assert_render): template = "{{ a|addslashes }} {{ b|addslashes }}" + context = {"a": "'", "b": mark_safe("'")} + expected = r"<a>\' \'" - django_template = engines["django"].from_string(template) # noqa - rust_template = engines["rusty"].from_string(template) # noqa - - output = self.engine.render_to_string( - "addslashes02", {"a": "'", "b": mark_safe("'")} - ) - self.assertEqual(output, r"<a>\' \'") + assert_render(template, context, expected) def test_quotes(assert_render):