Fixed #33631 -- Marked {% blocktranslate asvar %} result as HTML safe.

This commit is contained in:
cheng 2022-07-13 23:11:17 -07:00 committed by Mariusz Felisiak
parent 7faf25d682
commit d4c5d2b52c
4 changed files with 26 additions and 2 deletions

View File

@ -5,7 +5,7 @@ from django.template import Library, Node, TemplateSyntaxError, Variable
from django.template.base import TokenType, render_value_in_context
from django.template.defaulttags import token_kwargs
from django.utils import translation
from django.utils.safestring import SafeData, mark_safe
from django.utils.safestring import SafeData, SafeString, mark_safe
register = Library()
@ -198,7 +198,7 @@ class BlockTranslateNode(Node):
with translation.override(None):
result = self.render(context, nested=True)
if self.asvar:
context[self.asvar] = result
context[self.asvar] = SafeString(result)
return ""
else:
return result

View File

@ -270,6 +270,9 @@ Miscellaneous
* The undocumented ``django.http.multipartparser.parse_header()`` function is
removed. Use ``django.utils.http.parse_header_parameters()`` instead.
* :ttag:`{% blocktranslate asvar … %}<blocktranslate>` result is now marked as
safe for (HTML) output purposes.
.. _deprecated-features-4.2:
Features deprecated in 4.2

View File

@ -707,6 +707,11 @@ In practice you'll use this to get a string you can use in multiple places in a
template or so you can use the output as an argument for other template tags or
filters.
.. versionchanged:: 4.2
In older versions, ``asvar`` instances weren't marked as safe for (HTML)
output purposes.
``{% blocktranslate %}`` also supports :ref:`contextual
markers<contextual-markers>` using the ``context`` keyword:

View File

@ -416,6 +416,22 @@ class I18nBlockTransTagTests(SimpleTestCase):
output = self.engine.render_to_string("i18n41")
self.assertEqual(output, ">Error: Seite nicht gefunden<")
@setup(
{
"i18n_asvar_safestring": (
"{% load i18n %}"
"{% blocktranslate asvar the_title %}"
"{{title}}other text"
"{% endblocktranslate %}"
"{{ the_title }}"
)
}
)
def test_i18n_asvar_safestring(self):
context = {"title": "<Main Title>"}
output = self.engine.render_to_string("i18n_asvar_safestring", context=context)
self.assertEqual(output, "&lt;Main Title&gt;other text")
@setup(
{
"template": (