You need to enable JavaScript to run this app. Django中如何正确自定义密码重置邮件模板并传入uidb64、token参数
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何正确自定义密码重置邮件模板并传入uidb64、token参数

自定义Django密码重置邮件模板传值实现

内置的PasswordResetView在渲染邮件内容时,已经自动完成了所有必要上下文变量的注入,不需要额外编写视图逻辑传递uidb64、token等参数,自定义模板可以直接读取这些预置变量。

模板可直接使用的内置变量

Django默认注入到密码重置邮件模板的上下文包括:

  • user:发起密码重置请求的用户对象,可直接读取用户名、绑定邮箱等用户字段
  • uid:经base64编码的用户唯一标识,也就是你提到的*uidb64*值
  • token:系统生成的密码重置校验令牌
  • Django 3.0及以上版本额外提供reset_url变量:已经拼接完成的完整可访问重置链接,自动适配当前站点域名、路由规则,不需要手动拼接参数

带自定义样式的模板示例

对应你配置的registration/password_reset_email.html文件,可以直接写为带内联样式(兼容邮件客户端)的模板:

<div style="max-width: 600px; margin: 0 auto; font-family: system-ui, sans-serif; padding: 20px;">
  <h2 style="color: #222; border-bottom: 2px solid #2563eb; padding-bottom: 12px;">
    密码重置申请
  </h2>
  <p>你好,{{ user.get_username }}:</p>
  <p>
    我们收到了你针对绑定邮箱 <strong>{{ user.email }}</strong> 提交的密码重置请求,
    请在有效期内完成后续操作:
  </p>
  <div style="margin: 32px 0; text-align: center;">
    <a 
      href="{{ reset_url }}"
      style="background-color: #2563eb; color: #fff; padding: 12px 28px; border-radius: 6px; text-decoration: none; font-weight: 500;"
    >
      立即重置密码
    </a>
  </div>
  <p style="color: #666; font-size: 12px; line-height: 1.6;">
    如果按钮无法点击,可直接复制以下链接到浏览器打开:<br>
    <span style="word-break: break-all;">{{ reset_url }}</span>
  </p>
</div>

低版本Django适配

如果使用的Django版本低于3.0,上下文没有预置reset_url变量,可以直接读取已有的uid、token变量,结合模板标签自行拼接完整链接,不需要改动视图代码:

{% url 'password_reset_confirm' uidb64=uid token=token as reset_path %}
<a href="{{ request.scheme }}://{{ request.get_host }}{{ reset_path }}">
  点击完成密码重置
</a>

这里的核心逻辑是:url模板标签支持直接读取上下文变量作为路由参数,把上下文里的uid映射到路由定义要求的uidb64参数,搭配请求对象里的域名信息,就能生成格式完全正确的访问链接。

注意事项

  • 注意变量名映射:上下文里的编码用户ID变量名是uid,传入路由参数时才需要对应到路由定义中的uidb64字段,不要混淆变量名
  • 邮件样式尽量使用内联写法,主流邮件客户端会自动过滤<style>标签、外部引入的CSS,避免样式不生效
  • 重置链接的有效期不需要在模板中硬编码,直接修改项目settings.py中的PASSWORD_RESET_TIMEOUT配置即可,内置校验逻辑会自动读取该配置值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 10:06:02