在电子邮件模板中添加Django变量

时间:2013-12-29 02:38:33

标签: django-registration django-signals user-object

我有一个相对简单的目标:当用户注册并激活包含用户信息的帐户(如用户名,电子邮件等)时,向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语句以包含必要的对象,没有运气。我已经在网上找到了关于这个话题的大部分内容,所以我很茫然...

我错过了什么?

1 个答案:

答案 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注册

我可能过度思考了这个,但我很惊讶没有人加强并且能够帮助解决这个问题......