将 Django URL 插入自定义电子邮件模板
Posted
技术标签:
【中文标题】将 Django URL 插入自定义电子邮件模板【英文标题】:Inserting a Django URL into a custom email template 【发布时间】: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 没有错误,电子邮件发送。链接只是空白。什么都没有显示。 【参考方案1】:我认为您在电子邮件模板中的链接中缺少绝对 URL。
当您发送电子邮件时,Django 会使用相对 URL 填充 URL,并且您的 Gmail 邮件客户端可能正在使用自己的域和语言前缀路径填充 URL。
您需要在 Django 模板中添加当前站点的域名。
<a>
将如下所示:
<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>
【讨论】:
太棒了,让我试试这个。我会告诉你它是否有效。以上是关于将 Django URL 插入自定义电子邮件模板的主要内容,如果未能解决你的问题,请参考以下文章
使用操作 URL 将电子邮件模板中的 Firebase 项目名称替换为自定义域
如何自定义 django rest auth 密码重置电子邮件内容/模板