После некоторого количества проб и ошибок я обнаружил гораздо более краткий способ предоставления настраиваемого шаблонного электронного письма для сброса пароля в последней версии Django (1.8).
В вашем project/urls.py
добавьте следующие импорты:
from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy
и добавьте следующий маршрут в ваши urlpatterns перед включением обычного маршрута для аутентификации в django contrib:
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
, и, похоже, не было способа присвоить его значение, кроме переписывания этого конкретногомаршрут для этого случая, как я упоминал выше.
Надеюсь, это поможет без необходимости копировать и вставлять кучу практически идентичного кода, как некоторые из предложенных ответов - обратная связь приветствуется, конечно!