覆盖Django的重置密码邮件模板

3
在我的Django应用程序中,当用户请求重置密码时,我希望自定义发送给他们的电子邮件。我已将这些模板保存在项目的templates目录中。
  • /templates/email/password_reset/password_reset.html 用于HTML电子邮件
  • /templates/email/password_reset/password_reset.txt 用于纯文本电子邮件
  • /templates/email/password_reset/password_reset_subject.txt 用于主题
在我的URL Patterns中,我有...
urlpatterns = [

...

    url('^password_reset/$', auth_views.password_reset,
        {
            'template_name': 'accounts/reset_password.html',
            'email_template_name': 'email/password_reset/password_reset.txt',
            'html_email_template_name': 'email/password_reset/password_reset.html',
            'subject_template_name': 'email/password_reset/password_reset_subject.txt'
        },
        name='password_reset'),

...

]

然而,Django仍然使用默认的密码重置模板发送电子邮件。我是否遗漏了一些明显的东西?谢谢。

不确定,但是如果您使用等号传递参数?email_template_name='email/password_reset/password_reset.txt' - Alexander Sysoev
@avs 感谢您的评论。我认为url()函数接受一个函数名称和关键字参数列表作为字典,因此不需要使用等号吗? - Kieran
2个回答

2
事实证明,我在URL中意外地两次定义了auth_views.password_reset。删除重复的部分解决了问题。

1

它应该就是这么简单(docs)。

url('^password_reset/$', auth_views.password_reset,
    {
        'template_name': 'accounts/reset_password.html',
        'email_template_name': 'email/password_reset/password_reset.txt',
        'html_email_template_name': 'email/password_reset/password_reset.html',
        'subject_template_name': 'email/password_reset/password_reset_subject.txt'
    },
    name='password_reset'),

嗨@marksweb,感谢您的回答。我认为不需要使用kwargs名称,因为我将其作为第三个参数传递,所以Python知道我在引用什么,即使没有命名它。Django尊重“template_name”,但除此之外什么都不尊重,所以它必须通过字典参数获取? - Kieran
1
@Kieran 是的,说实话我已经研究过了,你是对的。如果你已经匹配了模板名称,就像你看起来已经做到了,那么它应该可以工作。 - markwalker_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接