在Django中将链接传递到电子邮件模板的正确方法

时间:2018-06-25 13:13:02

标签: django string hyperlink django-views

因此,我想在我的电子邮件模板中添加指向应用程序特定页面的链接,但是此页面会根据我通过视图传递给模板的不同值而更改,因此我尝试传递的名称像下面这样进入模板,但无法正常工作。有人可以告诉我正确的方法来做这样的事情吗?

views.py

html_message = loader.render_to_string(
            'catalog/email_template.html',
            {'body_message': body_message,
             'user': user_obj_to.get_full_name(),
             'link': link
             },
        )

        send_mail(
            email_subject,
            body_message,
            sender_email,
            [receiver_email],
            fail_silently=False,
            html_message=html_message
        )

email_template.html

<p style="font-family: sans-serif; font-size: 20px; font-weight: normal; margin: 0; Margin-bottom: 15px;">Dear {{ user }}</p>
                        <p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">{{ body_message }} <a href="{% url '{{ link|safe }}' %}">link</a></p>

1 个答案:

答案 0 :(得分:0)

这是我通常的做法。在View.py中创建您的网址,并将其传递到html模板。

#Get the template
htmly = get_template('email_templates/welcome.html')

#create your url here
my_url = some_url_maker_function()

#create a context
d = {'name': form.cleaned_data['first_name'] + " " + form.cleaned_data['last_name'],
     'username': form.cleaned_data['username'], 'my_url': my_url}

subject, from_email, to = 'Subject line', settings.EMAIL_HOST_USER, form.cleaned_data['email']

#pass the context to html template
html_content = htmly.render(d)

msg = EmailMultiAlternatives(subject, html_content, from_email, [to])

msg.attach_alternative(html_content, "text/html")

msg.send()

在html模板中,您可以拥有它。

<p style="font-family: sans-serif; font-size: 20px; font-weight: normal; margin: 0; Margin-bottom: 15px;">Dear {{ user }}</p>
                        <p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; Margin-bottom: 15px;">{{ body_message }} <a href="{% url '{{ my_url }}' %}">link</a></p>

我尚未测试此代码。可能需要一些调整。