【问题标题】:Overriding Django's reset password email templates覆盖 Django 的重置密码电子邮件模板
【发布时间】:2015-10-18 04:07:25
【问题描述】:

在我的 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 模式中,我有...

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'
  • @avs 感谢您的评论。我认为 url() 函数将函数名称和关键字参数列表作为字典,所以不需要使用等号?

标签: python django email templates


【解决方案1】:

事实证明,我不小心在我的 URL 中定义了两次 auth_views.password_reset。删除副本解决了问题。

【讨论】:

    【解决方案2】:

    应该就这么简单(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'),
    

    【讨论】:

    • 嗨@mar​​ksweb,感谢您的回答。我认为没有必要使用 kwargs 名称,因为我将它作为第三个参数传递,所以 Python 知道我指的是什么,即使不必命名它。 Django 尊重 'template_name' 但仅此而已,所以它必须通过参数字典来获取?
    • @Kieran 是的,所以说实话,我已经调查过了,你是对的。如果您已经匹配了模板名称,就像看起来一样,它应该可以工作。
    猜你喜欢
    • 2017-12-19
    • 2017-02-26
    • 2020-05-18
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2018-05-16
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多