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

Django密码重置邮件无法渲染HTML,显示纯文本及标签问题求助

解决Django密码重置邮件HTML渲染失败问题

核心问题:自定义视图未被实际调用

你已经写了CustomPasswordResetView并重写了邮件发送逻辑,但URL配置里依然用的是Django内置的auth_views.PasswordResetView,导致自定义的send_mail方法根本没生效,系统还是走默认的纯文本发送流程。

修复步骤

1. 替换URL配置为自定义视图

把urls.py里的路径改成你自己的CustomPasswordResetView,同时注意命名规范(密码重置发起页的name应该是password_reset,原配置里的password_reset_confirm是确认页的命名):

path('password_reset/', CustomPasswordResetView.as_view(
        html_email_template_name='registration/password_reset_email.html'
    ), name='password_reset'),

2. 确认HTML模板的有效性

  • 检查模板路径:确保registration/password_reset_email.html放在项目或APP的templates目录下(比如project/templates/registration/或app/templates/registration/)
  • 模板内容要保证是标准HTML结构,示例:
<!DOCTYPE html>
<html>
<body>
    <p>您好,{{ user.username }}:</p>
    <p>点击下方链接重置密码:</p>
    <p><a href="{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}">重置我的密码</a></p>
    <p>若非本人操作,请忽略此邮件。</p>
</body>
</html>

3. 本地测试邮件内容

可以在settings.py里配置控制台输出邮件,方便检查是否生成了正确的HTML版本:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

启动服务发起密码重置后,控制台会打印邮件的完整内容,能看到是否同时包含text/plain和text/html两个部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:32:33