【发布时间】:2020-11-28 16:43:18
【问题描述】:
我正在使用 django-post_office 发送电子邮件,它使用 django 模板呈现主题行:
subject = engine.from_string(self.template.html_content).render(self.context)
为了安全起见,Django 模板自动 sets autoescape=True,这意味着如果您有一个 HTML 字符,例如 Here's an email,它将生成一个带有转义字符的字符串:Here's an email。
如何在使用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))
结果:
My name is <FooBar's>.
【问题讨论】:
-
你能把autoescape的引擎选项改成false吗?
-
@ha-neul 可以,但你如何只为这一个变量做到这一点?
-
在docs.djangoproject.com/en/3.1/topics/templates,搜索
engine,它说:DjangoTemplates engines accept the following OPTIONS:你在'OPTIONS'中将其更改为False -
是的,但这需要完全重置模板引擎,这是一个安全风险。在这种情况下我该怎么做?
-
只是一个想法:也许定义一个
custom_from_string函数可以解决你的问题
标签: django django-templates django-postoffice