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

View File

@ -270,6 +270,9 @@ Miscellaneous
* The undocumented ``django.http.multipartparser.parse_header()`` function is * The undocumented ``django.http.multipartparser.parse_header()`` function is
removed. Use ``django.utils.http.parse_header_parameters()`` instead. 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: .. _deprecated-features-4.2:
Features deprecated in 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 template or so you can use the output as an argument for other template tags or
filters. filters.
.. versionchanged:: 4.2
In older versions, ``asvar`` instances weren't marked as safe for (HTML)
output purposes.
``{% blocktranslate %}`` also supports :ref:`contextual ``{% blocktranslate %}`` also supports :ref:`contextual
markers<contextual-markers>` using the ``context`` keyword: markers<contextual-markers>` using the ``context`` keyword:

View File

@ -416,6 +416,22 @@ class I18nBlockTransTagTests(SimpleTestCase):
output = self.engine.render_to_string("i18n41") output = self.engine.render_to_string("i18n41")
self.assertEqual(output, ">Error: Seite nicht gefunden<") 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( @setup(
{ {
"template": ( "template": (