我有一个扩展django-mailbox
电子邮件的模型。如果电子邮件采用文本格式,as_html()
会将文本转换为html。 (它将文本包装在<pre>
标签中。)
class EmailReply(models.Model):
def as_html(self):
if self.message.html:
return self.message.html
elif self.message.text:
context = {
'email': self.message.text
}
return mark_for_escaping(
render_to_string(
APP_NAME+'/email/text_as_html.html',
context
)
)
message = models.OneToOneField('django_mailbox.Message')
...
我想在一个html页面中显示多个电子邮件。我有一个迭代几个EmailReply对象的视图。我需要在iframe的srcdoc中包含html,而不是链接到消息。 (我正在将页面转换为PDF,并且转换器可以更好地将所有内容放在一个页面中。)
{% for email in emails %}
<div class="page">
<ul>
<li>Subject: {{ email.message.subject }}</li>
</ul>
<iframe srcdoc="{{ email.as_html|escape }}" frameBorder="0" scrolling="no" sandbox></iframe>
</div>
{% endfor %}
对于具有html组件的邮件,html将被转义:
<div class="page">
<ul>
<li>Subject: Example 1</li>
</ul>
<iframe srcdoc="<html><head></head><body>[...]" frameBorder="0" scrolling="no" sandbox></iframe>
</div>
但是,文本消息没有被转义:
<div class="page">
<ul>
<li>Subject: Example 2</li>
</ul>
<iframe srcdoc="
<!DOCTYPE html>
<html>
<head>
<title>Email Reply</title>
<meta charset="utf-8" />
</head>
<body>
[...]
</body>
</html>
" frameBorder="0" scrolling="no" sandbox></iframe>
</div>
我同时使用mark_for_escaping()
和escape
模板过滤器,但是当输出是文本电子邮件时,它仍然没有被转义。为什么不呢?
(使用Django 1.10。)