在template.render中关闭autoescaping

时间:2016-02-10 15:54:07

标签: python django django-1.10

在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),但它看起来并不优雅。

1 个答案:

答案 0 :(得分:3)

ticket 25469中的Django模板后端添加了autoescape选项。这一变化将包含在即将推出的Django 1.10中。

请注意,您可能必须在TEMPLATES设置中启用Django模板后端的两个实例,一个启用自动转义,另一个不启用(请参阅故障单中的this comment。您可以然后根据您是否要启用自动视图来选择正确的模板后端。

在Django 1.10发布之前,请注意,仅在Django 1.8中不推荐将Context传递给render()。它仍然适用于Django 1.8和1.9。