17

在我的 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 编码,或者至少避免对 & 符号进行编码?

4

2 回答 2

24

要为单个变量关闭它,请使用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 代码的自动转义,请在初始化 a 时使用该autoescapeContext参数:

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

文档的如何关闭 [Automatic HTML escaping]部分涵盖了一些模板内选项,如果您愿意的话。

于 2008-10-26T00:13:28.067 回答
9

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

另外,我怎么强调熟悉 Django 文档的重要性都不为过。许多像这样的常见问题都有容易找到的答案和解释(比如这个),通读文档并了解一切是如何工作的,将大大减少你需要花费的时间问“为什么这样做那”并增加您花费在构建以您想要的方式工作的东西的时间。

于 2008-10-26T02:59:43.630 回答