使用信号创建用户后,Django 发送欢迎电子邮件
Django send welcome email after User created using signals
我有一个 create_user_profile 信号,我想使用相同的信号向用户发送欢迎电子邮件。
这是我目前在 signals.py:
中写的内容
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
instance.profile.save()
subject = 'Welcome to MyApp!'
from_email = 'no-reply@myapp.com'
to = instance.email
plaintext = get_template('email/welcome.txt')
html = get_template('email/welcome.html')
d = Context({'username': instance.username})
text_content = plaintext.render(d)
html_content = html.render(d)
try:
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
except BadHeaderError:
return HttpResponse('Invalid header found.')
失败并出现以下错误:
TypeError at /signup/
context must be a dict rather than Context.
指向我的 views.py 文件中的 forms.save。
你能帮我理解这里出了什么问题吗?
在 django 1.11 上,模板上下文必须是字典:
https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.base.Template.render
尝试只删除上下文对象创建。
d = {'username': instance.username}
只需将字典而不是 Context 对象传递给渲染器
d = {'username': instance.username}
text_content = plaintext.render(d)
我有一个 create_user_profile 信号,我想使用相同的信号向用户发送欢迎电子邮件。
这是我目前在 signals.py:
中写的内容@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
instance.profile.save()
subject = 'Welcome to MyApp!'
from_email = 'no-reply@myapp.com'
to = instance.email
plaintext = get_template('email/welcome.txt')
html = get_template('email/welcome.html')
d = Context({'username': instance.username})
text_content = plaintext.render(d)
html_content = html.render(d)
try:
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
except BadHeaderError:
return HttpResponse('Invalid header found.')
失败并出现以下错误:
TypeError at /signup/
context must be a dict rather than Context.
指向我的 views.py 文件中的 forms.save。 你能帮我理解这里出了什么问题吗?
在 django 1.11 上,模板上下文必须是字典: https://docs.djangoproject.com/en/1.11/topics/templates/#django.template.backends.base.Template.render
尝试只删除上下文对象创建。
d = {'username': instance.username}
只需将字典而不是 Context 对象传递给渲染器
d = {'username': instance.username}
text_content = plaintext.render(d)