从_string()和render()使用django模板时如何禁用自动转义?

从_string()和render()使用django模板时如何禁用自动转义?,django,django-templates,django-postoffice,Django,Django Templates,Django Postoffice,我正在使用发送电子邮件,其中使用django模板呈现主题行: subject = engine.from_string(self.template.html_content).render(self.context) Django模板会自动进行安全保护,这意味着如果您有一个HTML字符,例如Here's a email,它将生成一个带有转义字符的字符串:Here';这是一封电子邮件 当以这种方式使用from_string和render来适当显示电子邮件主题时,如何禁用自动转义 另一个例

我正在使用发送电子邮件,其中使用django模板呈现主题行:

subject = engine.from_string(self.template.html_content).render(self.context)
Django模板会自动进行安全保护,这意味着如果您有一个HTML字符,例如
Here's a email
,它将生成一个带有转义字符的字符串:
Here';这是一封电子邮件

当以这种方式使用
from_string
render
来适当显示电子邮件主题时,如何禁用自动转义

另一个例子是:

from django.template import engines
template = engines['django'].from_string("My name is {{ my_name }}.")
context = {"my_name": "<FooBar's>"}
print(template.render(context))

您可能只是想使用适当的模板标记来转义字符串

{% autoescape off %}
{{ body }}
{% endautoescape %}
或者只是把它标记为


您也可以通过设置为False来转义,您可能只想使用正确的模板标记转义字符串

{% autoescape off %}
{{ body }}
{% endautoescape %}
或者只是把它标记为


您也可以通过设置为False来进行转义

您可以将autoescape的引擎选项更改为False吗?@ha neul这会起作用,但是如何仅为这一个变量进行转义呢?在中,搜索
引擎
,它说:
DjangoTemplates引擎接受以下选项:
您在
'OPTIONS'
中将其更改为
False
,但这需要整个模板引擎重置,这是一种安全风险。在这种情况下,我该怎么做呢?只是想一想:也许定义一个
自定义\u from_string
函数可以解决您的问题,您可以将autoescape的引擎选项更改为false吗?@ha neul这会行得通,但您如何仅为这一个变量做到这一点呢?在中,搜索
引擎
,它说:
DjangoTemplates引擎接受以下选项:
您在
'OPTIONS'
中将其更改为
False
,但这需要整个模板引擎重置,这是一种安全风险。在这种情况下我该怎么做呢?只是一个想法:也许定义一个
custom\u from\u string
函数可以解决你的问题谢谢,我想我可以应用
.from\u string({%autoescape off%}我的名字是{{My\u name}.{%endautoescape%})
,但感觉不是很像蟒蛇。有没有一种方法可以在不更改整个引擎的标志的情况下将该标志传递给该模板的构造函数?为什么不将变量标记为安全的,显式优于隐式呢?我想我可以从字符串({%autoescape off%}我的名字是{{{My_name}.{%endautoescape%})应用
但感觉不太像蟒蛇。有没有一种方法可以在不更改整个引擎的标志的情况下,将此模板的标志传递给构造函数?为什么不将变量标记为安全的,显式优于隐式
"My name is {{ my_name|safe }}.