[cross-posted from
Does Django password_reset support html email templates? ]
在试错了一段时间后,我发现在Django的最新版本(1.8)中提供自定义模板化密码重置电子邮件的方法更加简洁。在您的
project/urls.py
文件中,添加以下导入:
from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy
在通常的Django贡献认证URL路由包含之前,在您的urlpatterns中添加以下路由:
url(r'^accounts/password/reset/$',
auth_views.password_reset,
{
'post_reset_redirect': reverse_lazy('auth_password_reset_done'),
'html_email_template_name': 'registration/password_reset_html_email.html'
},
name='auth_password_reset'),
url('^', include('django.contrib.auth.urls')),
然后,在你的应用程序的templates/registration
文件夹中,创建password_reset_html_email.html
,并使用任何你想要的HTML模板。
这样做的原因在于django/contrib/auth/views.py
的源代码中,它具有原始URL路由映射到的视图函数:
147 def password_reset(request, is_admin_site=False,
148 template_name='registration/password_reset_form.html',
149 email_template_name='registration/password_reset_email.html',
150 subject_template_name='registration/password_reset_subject.txt',
151 password_reset_form=PasswordResetForm,
152 token_generator=default_token_generator,
153 post_reset_redirect=None,
154 from_email=None,
155 current_app=None,
156 extra_context=None,
157 html_email_template_name=None):
158
"
html_email_template_name
的默认值为
None
,似乎没有办法分配它的值,除了像我上面提到的那样为这种情况重写特定路由之外。希望这可以帮助,而不需要像其他答案建议的那样复制粘贴大量几乎相同的代码 - 当然欢迎反馈!"