【问题标题】:Inserting a Django URL into a custom email template将 Django URL 插入自定义电子邮件模板
【发布时间】:2020-02-09 23:49:26
【问题描述】:

我正在尝试在我为我的网站制作的自定义模板中发送一封 Django 电子邮件。

但是,我无法让 Django URL 链接正常工作。没有模板,我可以让链接工作。用户名可供参考。

有人知道怎么做吗?

这是我的 views.py

    #This code is in the view that sends the email
    from django.core.mail import EmailMessage
    from django.core.mail import EmailMultiAlternatives
    from django.template.loader import get_template
    from django.template import Context

    subject, from_email = 'subject', '<info@mysite.com>'
    plaintext = get_template('email.txt')
    htmly = get_template('email.html')
    username = user.username
    d = { 'username': username }
    text_content = plaintext.render(d)
    html_content = htmly.render(d)            
    msg = EmailMultiAlternatives(subject, text_content, from_email, [user.email])
    msg.attach_alternative(html_content, "text/html")
    msg.send()

此设置基于此答案:Creating email templates with Django

这里是 email.html 文件:

    <h3>Hi <strong>{{ username }}</strong>,</h6>
    <p> disown kvdsvnsdov vknvisodvnsdv dsdov siod vsd. Here is a link:</p>
    <a href="http://domain{% url 'home' %}">Check Now</a>

这是 email.txt:

    Hi {{ username }},
    disown kvdsvnsdov vknvisodvnsdv dsdov siod vsd. Here is a link:
    http://domain{% url 'home' %}

【问题讨论】:

  • 您遇到了什么错误或任何回溯?
  • @ParthS007 没有错误,电子邮件发送。链接只是空白。什么都没有显示。

标签: html django django-email


【解决方案1】:

我认为您在电子邮件模板中的链接中缺少绝对 URL。

当您发送电子邮件时,Django 会使用相对 URL 填充 URL,并且您的 Gmail 邮件客户端可能正在使用自己的域和语言前缀路径填充 URL。

您需要在 Django 模板中添加当前站点的域名。

&lt;a&gt; 将如下所示:

<a href="{{ request.scheme }}://{{ request.get_host }}{% url 'home' %}">Check Now</a>

为电子邮件呈现模板,这是您需要主机值的情况之一:

from django.template.loader import render_to_string

def view(request):
    ...
    email_body = render_to_string(
        'template.txt', context, request=request)

【讨论】:

    【解决方案2】:

    不确定您的模板,但如果我没记错 Django 网址,您可以在代码中使用 reverse 并通过上下文将解析后的网址传递给您的模板。所以它会是这样的:

    from django.core.mail import EmailMessage
    from django.core.mail import EmailMultiAlternatives
    from django.template.loader import get_template
    from django.template import Context
    from django.urls import reverse
    
    subject, from_email = 'subject', '<info@mysite.com>'
    plaintext = get_template('email.txt')
    htmly = get_template('email.html')
    username = user.username
    d = { 'username': username, 'url': reverse('home') }
    text_content = plaintext.render(d)
    html_content = htmly.render(d)            
    msg = EmailMultiAlternatives(subject, text_content, from_email, [user.email])
    msg.attach_alternative(html_content, "text/html")
    msg.send()
    

    模板:

    <h3>Hi <strong>{{ username }}</strong>,</h6>
    <p> disown kvdsvnsdov vknvisodvnsdv dsdov siod vsd. Here is a link:</p>
    <a href="http://domain{{ url }}">Check Now</a>
    

    【讨论】:

    • 太棒了,让我试试这个。我会告诉你它是否有效。
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多