password_change_done 没有在 Django 中使用自定义模板

password_change_done not using custom template in Django

我使用 Django 的 auth_views.password_change 来允许用户更改他们的密码。它使用自定义模板并且运行良好,但我遇到的问题是它重定向到 Django 的 密码更改成功 管理模板而不是我声明的自定义模板。

urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views

from . import views

app_name = 'users'

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^add-user/$', views.CreateUserView.as_view(), name='add-user'),
    url(r'^search/$', views.UserSearchView.as_view(), name='search-users'),
    url(r'^login/$', views.LoginView.as_view(), name='login'),
    url(r'^logout/$', views.LogoutView.as_view(), name='logout'),
    url(r'^(?P<pk>\d+)/settings/update$', views.UpdateAccountView.as_view(), name='update-account'),
    url(r'^settings/change/$', auth_views.password_change, {'template_name': 'users/forms/change-password.html'},
    name='change-password'),
    url(r'^settings/change-done/$', auth_views.password_change_done,
    {'template_name': 'users/forms/change-password-done.html'}, name='change-password-done'),
    url(r'^(?P<pk>\d+)/delete-user/$', views.DeleteUserView.as_view(), name='delete-user'),

有什么我遗漏的想法吗?

INSTALLED_APPS 中,确保在 admin 之前指定带有自定义模板的应用。

Django 按顺序搜索模板。

你应该使用:

url(r'^settings/change/$', auth_views.password_change, {'template_name': 'users/forms/change-password.html',post_change_redirect:'change-password-done'},name='change-password'),

没有post_change_redirect默认模板将在这种情况下加载。

很久以前就有人问过这个问题,但上面的答案对我不起作用,而这个却起作用了。在 urls.py:

确保此导入存在:

from django.contrib.auth.views import ..., password_change_done, ...

然后从 URL 中删除 url(r'^', include('django.contrib.auth.urls')) 并使用您的自定义模板覆盖 password_change_done 视图。同样,我的代码中也已经实现了上述建议。