我有一个相对简单的目标:当用户注册并激活包含用户信息的帐户(如用户名,电子邮件等)时,向Django管理员发送电子邮件。我正在使用django-registration
来处理注册过程。然后我使用信号发送电子邮件。这个过程运行得很好,但是一旦我尝试将用户,用户名或用户的电子邮件注入电子邮件模板,我就会遇到麻烦。
这是我的signal_connectors.py
:
from django.core.mail import mail_admins
from django.dispatch import receiver
from registration.signals import user_registered
from django.template.loader import render_to_string
@receiver(user_registered, dispatch_uid="common.signal_connectors.user_registered_handler")
def user_registered_handler(sender, **kwargs):
print('user registration completed...')
subject = 'registration notify'
template = 'common/email.html'
message = render_to_string(template, {'user': user})
from_email = 'from@example.com'
# send email to admins, if user has been registered
mail_admins(subject, message, fail_silently=False, connection=None, html_message=None)
print('sending email to administrators...')
模板如下:
{{ user }} has registered at example.com
我尝试了{{user}}
,{{user.username}}
,{{request.user.username}}
等变体。另外,在上面message
变量的signals_connectors.py
中,我试过了变体,以及相应的导入语句。
我也尝试使用上下文设置渲染模板,以及我在网络上找到的其他变体,例如:
finding the django-registration username variable
我一直有这样的错误:
global name 'user' is not defined
我认为我正确设置了模板上下文处理,因为我可以在另一个模板中使用类似{{ user.username }}
的内容并且它可以正常工作。
我也尝试纠正我的import语句以包含必要的对象,没有运气。我已经在网上找到了关于这个话题的大部分内容,所以我很茫然...
我错过了什么?
答案 0 :(得分:0)
我没有意识到这太容易了。基于这篇文章:
Where should signal handlers live in a django project?
我尝试在信号连接器方法中实际添加用户和请求作为参数,这有效:
. . .
@receiver(user_registered, dispatch_uid="common.signal_connectors.user_registered_handler")
def user_registered_handler(sender, user, request, **kwargs):
. . .
然后,我在电子邮件模板中使用了这个:
{{user}}已在example.com注册
我可能过度思考了这个,但我很惊讶没有人加强并且能够帮助解决这个问题......