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
视图。同样,我的代码中也已经实现了上述建议。
我使用 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
视图。同样,我的代码中也已经实现了上述建议。