在我的django应用程序中,我使用模板构建电子邮件正文,其中一个参数是url,注意在url中有两个以&符号分隔的参数。

t = loader.get_template("sometemplate")
c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
})
print t.render(c)

渲染后产生: http://127.0.0.1/test?a=1&b=2

请注意&符是HTML编码为“& amp;”。绕过这个问题的一种方法是将每个参数分别传递给我的模板并在模板中构建url,但是我想避免这样做。

有没有办法禁用上下文参数的HTML编码,或者至少避免编号&符号?

有帮助吗?

解决方案

要为单个变量关闭它,请使用 mark_safe

from django.utils.safestring import mark_safe

t = loader.get_template("sometemplate")
c = Context({
   'foo': 'bar',
   'url': mark_safe('http://127.0.0.1/test?a=1&b=2'),
})
print t.render(c)

或者,要完全从Python代码中关闭autoescaping,在初始化 Context 时使用 autoescape 参数:

c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)

如何转向[自动HTML如果你宁愿在那里做一些模板选项,那么文档的转义部分就会涵盖。

其他提示

或者只是使用“安全”的过滤模板。

另外,我不能强调熟悉Django文档的重要性;像这样的许多常见问题都有易于找到的答案和解释(喜欢这个),阅读文档并了解一切如何运作将大大减少您需要花费的时间,并询问“为什么会这样做”。并且增加你花在构建按照你想要的方式工作的时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top