如何自定义dj-rest-auth注册后的邮箱验证邮件模板?
解决dj-rest-auth自定义邮箱验证邮件模板的问题
核心原理
dj-rest-auth依赖django-allauth处理邮件发送,其默认模板遵循Django的模板加载优先级——项目根目录下的同名模板会覆盖组件自带的模板。只需在项目中创建对应路径的自定义模板即可替换默认样式。
具体步骤
创建模板目录结构
在你的Django项目根目录的templates文件夹下,创建与dj-rest-auth默认模板完全一致的路径:templates/ └── dj_rest_auth/ └── registration/添加自定义模板文件
在上述registration目录下创建两个模板文件(适配不同邮件客户端):account_verification_email.html:HTML格式的邮件模板(用于支持HTML的客户端)account_verification_email.txt:纯文本格式的邮件模板(用于不支持HTML的客户端)
模板中可直接使用dj-rest-auth传递的上下文变量:
{{ activate_url }}:邮箱验证的完整链接{{ user }}:当前注册用户对象(可调用{{ user.username }}、{{ user.email }}等属性)
示例HTML模板:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>完成邮箱验证</title> <style> .mail-container { max-width: 640px; margin: 20px auto; padding: 30px; background: #ffffff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); font-family: 'Segoe UI', sans-serif; } .verify-btn { display: inline-block; padding: 12px 24px; margin: 20px 0; background: #2563eb; color: #fff; text-decoration: none; border-radius: 6px; font-size: 16px; } </style> </head> <body style="background: #f3f4f6;"> <div class="mail-container"> <h2>欢迎加入 {{ user.username }}!</h2> <p>为了完成注册,请点击下方按钮验证你的邮箱:</p> <a href="{{ activate_url }}" class="verify-btn">验证我的邮箱</a> <p>如果按钮无法点击,请复制以下链接到浏览器地址栏:</p> <p style="color: #6b7280; word-break: break-all;">{{ activate_url }}</p> <p>若你没有进行此操作,请忽略此邮件。</p> </div> </body> </html>示例纯文本模板:
欢迎加入 {{ user.username }}! 为了完成注册,请点击下方链接验证你的邮箱: {{ activate_url }} 如果链接无法点击,请复制上面的地址到浏览器地址栏。 若你没有进行此操作,请忽略此邮件。确认Django模板配置
确保项目settings.py中的TEMPLATES配置正确,保证Django能加载到自定义模板:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 确保包含项目templates目录 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]自定义邮件主题(可选)
若需要修改邮件主题前缀,可在settings.py中添加django-allauth的配置:ACCOUNT_EMAIL_SUBJECT_PREFIX = '[你的应用名称] '
内容的提问来源于stack exchange,提问作者joseph pazmiño
相关产品推荐
相关产品推荐

