将Django的URL插入自定义的电子邮件模板。

16 浏览
0 Comments

将Django的URL插入自定义的电子邮件模板。

我试图在我网站的自定义模板中发送Django邮件。然而,我无法正确地使Django的URL链接工作。在没有模板的情况下,我可以使链接工作。用户名可用于引用。有人知道如何让这个工作吗?

这是我的views.py代码:

    # 这段代码在发送邮件的视图中
    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', ''
    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文件:

    

Hi {{ username }},

disown kvdsvnsdov vknvisodvnsdv dsdov siod vsd. Here is a link: Check Now

这里是email.txt:

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

0
0 Comments

问题:在自定义的电子邮件模板中插入Django URL的问题。

原因:您在电子邮件模板中的链接中缺少绝对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)

0
0 Comments

问题的原因是在自定义的电子邮件模板中插入Django URL时遇到困难。解决方法是使用Django的reverse函数在代码中生成解析后的URL,并通过上下文将其传递到模板中。

具体的解决方法如下:

1. 导入必要的模块:导入django.core.mail中的EmailMessageEmailMultiAlternatives类,导入django.template.loader中的get_template函数,导入django.template中的Context类,导入django.urls中的reverse函数。

2. 设置电子邮件的主题和发件人。

3. 使用get_template函数获取纯文本和HTML格式的电子邮件模板。

4. 获取用户的用户名,并将其作为一个变量存储在字典d中,同时使用reverse函数获取解析后的URL,并将其也存储在字典d中。

5. 使用render方法渲染纯文本和HTML格式的电子邮件内容。

6. 创建EmailMultiAlternatives对象,并将主题、纯文本内容、发件人和收件人作为参数传递。

7. 使用attach_alternative方法将HTML格式的内容添加到电子邮件中。

8. 使用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>

文章结束,接下来将尝试这个解决方法,如果有效会告诉你。

0