在我的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编码为"&".解决这个问题的一种方法是将每个参数分别传递给我的模板并在模板中构建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,请在初始化时使用autoescape
参数Context
:
c = Context({ 'foo': 'bar', 'url': 'http://127.0.0.1/test?a=1&b=2', }, autoescape=False)
如果你想在那里做一些in-template选项,如何关闭文档中的[自动HTML转义]部分.
或者只是在模板中使用"安全"过滤器.
另外,我不能强调熟悉Django文档的重要性; 像这样的许多常见问题有很容易找到的答案和解释(比如这个),阅读文档并了解一切如何运作将大大减少你需要花费的时间问"为什么这样做"并且增加你花在构建按照你想要的方式工作的时间上的时间.