在 Django <1.8 中,可以在不自动转义的情况下渲染模板:
context = Context({...}, autoescape=False)
result = template.render(context)
在 Django 1.8/1.9 中,我得到以下弃用警告:
RemovedInDjango110Warning: render() must be called with a dict, not a Context.
当然,我可以将Context
实例更改为 dict:
result = template.render({...})
但是,如何强制 render
函数关闭自动转义,而无需在每个电子邮件模板(不是我项目中的每个模板)中使用{% autoescape %}
标签!
我想到的只有一个解决方案:遍历所有上下文(字典)项目并将它们标记为安全(mark_safe
),但它似乎并不优雅。
工单 25469 的 Django 模板后端中添加了一个autoescape
选项。这一变化将包含在即将发布的Django 1.10中。
请注意,您可能必须在TEMPLATES
设置中启用 Django 模板后端的两个实例,一个启用自动转义,另一个不支持(请参阅票证中的此评论。然后,您可以根据是否要启用自动转义来选择正确的模板后端。
在 Django 1.10 发布之前,请注意,将Context
传递给 render()
仅在 Django 1.8 中被弃用。它仍然适用于 Django 1.8 和 1.9。