html - 在 Django 中发送 HTML 电子邮件

标签 html django django-templates html-email

在我的项目中,我添加了一个时事通讯提要。但是当尝试使用此功能发送电子邮件时:

def send(request):
    template_html = 'static/newsletter.html'
    template_text = 'static/newsletter.txt'
    newsletters = Newsletter.objects.filter(sent=False)
    subject = _(u"Newsletter")
    adr = NewsletterEmails.objects.all()
    for a in adr:
        for n in newsletters:
            to = a.email
            from_email = settings.DEFAULT_FROM_EMAIL           
            subject = _(u"Newsletter Fandrive")
            text = get_template(template_text)
            html = get_template(template_html)
            d = { 'n': n,'email': to }
            text_content = text.render(d)
            html_content = html.render(d)

            msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
            msg.attach_alternative(html_content, "text/html")
            msg.send()

使用这些模板:

//text

===================  Newsletter - {{ n.date }}  ============
==========================================================
                      {{ n.title }}
==========================================================          
{{ n.text }}
==========================================================

//html

<html>
    <head>
    </head>
    <body>
    <div style="">
        <div style="">
            <h1 style="">{{ n.title }} - {{n.date}}</h1>
                <p style="">            
                    {{ n.text }}
                </p>
        </div>
    </div>
    </body>
</html>

和模型:

class Newsletter(models.Model):
    title = models.CharField("title", blank=False, max_length=50)
    text = models.TextField("text", blank=False)
    sent = models.BooleanField("sent", default=False)
    data = models.DateTimeField("creation date", auto_now_add=True, blank=False)

class NewsletterEmails(models.Model):
    email = models.EmailField(_(u"e-mail address"),)

我得到:

TemplateSyntaxError at /utils/newsletter_send/<br/> Caught an exception while rendering: 'dict' object has no attribute 'autoescape'

{{ n.date }} 在 text_email 模板中

尽管我的调试显示我正在向模板发送正确的时事通讯对象以及调试上下文:

context {'email': u'admin@domain.com', 'n': <Newsletter: Newsletter object>}

为什么会这样?从我发现的这个错误来看,它以某种方式连接到将空字典发送到模板渲染器,但我的不是空的...

最佳答案

仅供引用。我找到了另一种方法:

def send(request):
    template_html = 'static/newsletter.html'
    template_text = 'static/newsletter.txt'
    newsletters = Newsletter.objects.filter(sent=False)
    subject = _(u"Newsletter Fandrive")
    adr = NewsletterEmails.objects.all()
    for a in adr:
        for n in newsletters:
            to = a.email
            from_email = settings.DEFAULT_FROM_EMAIL           
            subject = _(u"Newsletter Fandrive")

            text_content = render_to_string(template_text, {"title": n.title,"text": n.text, 'date': n.date, 'email': to})
            html_content = render_to_string(template_html, {"title": n.title,"text": n.text, 'date': n.date, 'email': to})

            msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
            msg.attach_alternative(html_content, "text/html")
            msg.send()

    return HttpResponseRedirect('/')

关于html - 在 Django 中发送 HTML 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237519/

相关文章:

html - Div 尽可能高(100% 拉伸(stretch))

javascript - 在html之间传递变量(php)

python - django.db.utils.OperationalError : no such table: auth_user

python - 访问 django 管理页面时出错,如下 - TypeError at/admin/login/_getfullpathname : illegal type for path parameter

html - vglm 回归对象 (VGAM) 的 Latex 或 HTML 摘要输出表

javascript - 淡化 div 中文本的底部或顶部

python - 异常值: 'User' object has no attribute 'update' thrown in DJANGO ORM

Django 管理器 - 检索具有非空相关对象集的对象

python - 我是在父级和子级 Django 模板中添加 Google Analytics 跟踪脚本,还是仅在 Django 网站上的父级模板中添加 Google Analytics 跟踪脚本?

javascript - 仅当单击同一行中包含数据库对象的另一个 <div> 时显示包含数据库对象的 <div> - Django