【问题标题】:Python/Django: Email template is not rendered. Shows html tags and doesn't convert entitiesPython/Django:电子邮件模板未呈现。显示 html 标签并且不转换实体
【发布时间】:2012-10-28 11:14:45
【问题描述】:

我正在使用模板发送电子邮件,但模板未正确呈现。它显示 html 标签并且不呈现特殊字符。

它会渲染上下文,例如,如果我为它提供一个 "username":some_name 那么它会在我执行 {{username}} 时正确显示用户名

我的模板.html:

<p>hello &oslash;</p>

在视图中:

from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.template import Context

t = get_template('my_template.html')
msg = EmailMultiAlternatives("hi", t.render(Context({})), from_email, [user.email])
msg.send()

收到的电子邮件显示带有 p 标签。此外,实体的外观与模板中所写的完全一样。除了需要渲染特殊字符外,我只使用 .txt 文件就可以了。如果我直接将它们写在 txt 文件中,尝试发送时会出错。

我也尝试过使用 django 的 send_mail()。还向模板添加了一个 html 标记。结果相同。

【问题讨论】:

    标签: python django email django-templates


    【解决方案1】:

    多部分/替代电子邮件有两个部分:

    1. 电子邮件的纯文本版本
    2. 电子邮件的 html 版本

    所以在这里你只需要执行 #2 并添加 html 部分!

    按照此处的示例...https://docs.djangoproject.com/en/dev/topics/email/#sending-alternative-content-types ...您可能只需要在 msg.send() 之前添加这样的一行`

    msg.attach_alternative(t.render(Context({})), "text/html")
    

    【讨论】:

    • 是的,添加该行就可以了。没有必要像引用的示例中那样提供实际的替代文本。谢谢。
    • 我遇到了同样的问题。我究竟会在哪里添加那条线?通过我所有的代码和所有的 django 代码,我没有看到任何 msg.send。
    • ohh msg 特定于提供的示例代码 user984003,您可以将附加替代品附加到您的 EmailMultiAlternatives 对象所在的位置
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2013-06-18
    相关资源
    最近更新 更多