You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Allauth自定义确认邮件中获取用户注册时的名字

解决方法:在Django Allauth确认邮件中调用用户注册时填写的姓名

不用完全重写整个确认邮件流程,只需要简单几步就能实现你的需求:

1. 确保自定义注册表单正确保存姓名到用户模型

首先,你已经有了收集姓名的自定义注册表单,关键要确保表单提交后,姓名被正确保存到用户对象中(比如默认的user.first_name字段,或者你自定义的字段)。举个示例,你的自定义表单可以这么写:

# 在你的app的forms.py中
from allauth.account.forms import SignupForm
from django import forms

class CustomSignupForm(SignupForm):
    # 添加姓名输入字段
    first_name = forms.CharField(max_length=30, label="你的名字")

    def save(self, request):
        # 先调用父类方法创建用户
        user = super().save(request)
        # 将表单中填写的姓名赋值给user的first_name字段
        user.first_name = self.cleaned_data.get("first_name")
        user.save()
        return user

别忘了在settings.py里配置这个自定义表单,让allauth使用它:

ACCOUNT_FORMS = {
    'signup': 'yourapp.forms.CustomSignupForm',
}

2. 在重写的邮件模板中直接调用用户姓名

现在你已经重写了email_confirmation_message.txt模板,只需要直接用{{ user.first_name }}就能获取用户注册时填写的名字了。修改后的模板大概是这样:

{% load account %}
{% load i18n %}
{% autoescape off %}
Dear {{ user.first_name }},

感谢你注册我们的网站!请点击下面的链接激活你的账号:

{{ activate_url }}

如果这不是你操作的,请忽略此邮件。

谢谢!
{% endautoescape %}

额外情况:如果姓名存在自定义用户模型或Profile中

如果你的姓名字段不在默认User模型的first_name里,而是在自定义用户模型或者关联的Profile模型中,你可以这么做:

  • 直接在模板中通过关联关系调用,比如{{ user.profile.full_name }}(前提是模板上下文能拿到user对象)
  • 或者重写AccountAdapter的send_confirmation_mail方法,添加额外的上下文变量:
# 在你的app的adapter.py中
from allauth.account.adapter import DefaultAccountAdapter

class CustomAccountAdapter(DefaultAccountAdapter):
    def send_confirmation_mail(self, request, emailconfirmation, signup):
        # 获取默认上下文
        ctx = self.get_email_confirmation_context(request, emailconfirmation, signup)
        # 添加用户的姓名到上下文(替换成你的实际字段路径)
        ctx['user_full_name'] = emailconfirmation.user.profile.full_name
        # 发送邮件
        self.send_mail(
            'account/email/email_confirmation_subject.txt',
            'account/email/email_confirmation_message.txt',
            ctx,
            emailconfirmation.email_address.email,
            request=request,
        )

然后在settings.py配置这个适配器:

ACCOUNT_ADAPTER = 'yourapp.adapter.CustomAccountAdapter'

之后在模板里就可以用{{ user_full_name }}来调用姓名了。

总结一下,核心就是确保姓名被正确保存到用户相关的模型中,然后在邮件模板里直接调用对应的字段就行,不需要完全重写整个确认邮件逻辑。

内容的提问来源于stack exchange,提问作者Raf Rasenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:57:41