问题描述
我想使用 Django 模板发送 HTML 电子邮件,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<title>Title</title>
</head>
<body>
Hello <strong>{{ message }}</strong> - your account is activated.
</body>
</html>
我还想通过电子邮件从后端发送数据。在此示例中,我想从后端发送带有电子邮件模板的消息。
这是我的观点:
def home(request):
message_name = "NAME"
message_email = "EMAIL"
message = "USER"
msg_html = render_to_string('email/email.html')
send_mail(
'message from ' + message_name,# subject
message,# message
message_email,# from email
['myemail@outlook.de'],# To Email
html_message=msg_html,)
context = {'message': message,'message_name': message_name,'message_email': message_email}
return render(request,'email/email.html',context)
当我收到电子邮件时,我只收到文本,而不是在本例中为 USER 的 {{ message }}。
解决方法
您需要将上下文传递到您的 render_to_string
调用中。 render_to_string
获取模板并返回带有传递上下文的 HTML。然后您可以将其传递给 send_mail
。所以把代码改成:
[...]
message_name = 'NAME'
message_email = 'EMAIL'
message = 'USER'
context = {'message': message,'message_name': message_name,'message_email': message_email}
msg_html = render_to_string('email/email.html',context=context)
[...]