我不断收到此错误 Reverse for 'password_reset_done' not found。“password_reset_done”不是有效的视图函数或模式名称。我正在尝试使用来自 django.contrib.auth.views 的默认视图
from django.conf.urls import url
from accounts import views
from django.contrib.auth.views import (login,
logout,
password_reset,
password_reset_done,
password_reset_confirm,
)
urlpatterns =[
url(r'^$', views.cover, name='cover'),
url(r'^home/$', views.home, name = 'home'),
url(r'^login/$', login, {'template_name':'accounts/login.html'}, name ="login"),
url(r'^logout/$', logout, {'template_name':'accounts/logout.html'}, name = "logout"), # views define a link to connecct this to views then to template
url(r'^register/$', views.register, name="register"),
url(r'^profile/$', views.view_profile, name='view_profile'),
url(r'^profile/edit/$', views.edit_profile, name='edit_profile'),
url(r'^change-password/$', views.change_password, name='change_password'),
url(r'^reset-password/$', password_reset, name= 'password_reset'),
url(r'^reset-password/done/$', password_reset_done, name='password_reset_done'),
url(r'^reset-password/confirm/$', password_reset_confirm, name='password_reset_confirm')
]
Run Code Online (Sandbox Code Playgroud)
请任何人帮助我...我已经检查了所有...但找不到故障。
请尝试此操作,小心注意一些错误,例如未在某些网址的末尾添加 $ 或可能添加它。还要注意success_url在哪里给出,因为内部代码使用它并且没有它就丢失了。
在这段代码中,我选择用于管理用户的应用程序称为帐户,您可以调用任何内容。
模板应该放在django识别的目录中,否则它不会在这里找到它们是settings.py的代码
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
这是完整的 urls.py
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from accounts.views import signup
urlpatterns = [
url(r'signup/$', signup, name='signup'),
url(r'login/$',auth_views.LoginView.as_view(template_name='login.html')),
url(r'logout/$',auth_views.LogoutView.as_view(template_name='logout.html')),
url(r'password_change/$',auth_views.PasswordChangeView.as_view(template_name='password_change.html',success_url='/accounts/password_change_done')),
url(r'password_change_done/',auth_views.PasswordChangeDoneView.as_view(template_name='password_change_done.html')),
url(r'password_reset/$',auth_views.PasswordResetView.as_view(template_name='password_reset.html',email_template_name='password_reset_email.html',subject_template_name='password_reset_subject.txt',success_url='/accounts/password_reset_done/',from_email='support@yoursite.ma')),
url(r'password_reset_done/',auth_views.PasswordResetDoneView.as_view(template_name='password_reset_done.html')),
url(r'password_reset_confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',auth_views.PasswordResetConfirmView.as_view(template_name='password_reset_confirm.html',success_url='/accounts/password_reset_complete/')),
url(r'password_reset_complete/',auth_views.PasswordResetCompleteView.as_view(template_name='password_reset_complete.html')),
]
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,但通过在 PasswordResetView 中添加 success_url 参数解决了它:
添加基于类的视图PasswordResetView的success_url参数。这将替换password_reset_done的默认路由
url(r'^reset/$',PasswordResetView.as_view(
template_name='password_reset.html',
email_template_name='password_reset_email.html',
subject_template_name='password_reset_subject.txt',
...
success_url = reverse_lazy('accounts:password_reset_done')
...
...
),name='password_reset'),
Run Code Online (Sandbox Code Playgroud)
我找到了这段代码,这似乎有效。
from django.conf.urls import url
from accounts import views
from django.contrib.auth.views import (login,
logout,
password_reset,
password_reset_done,
password_reset_confirm,
)
from django.contrib.auth import views as auth_views
urlpatterns =[
url(r'^$', views.cover, name='cover'),
url(r'^home/$', views.home, name = 'home'),
url(r'^login/$', login, {'template_name':'accounts/login.html'}, name ="login"),
url(r'^logout/$', logout, {'template_name':'accounts/logout.html'}, name = "logout"),
url(r'^register/$', views.register, name="register"),
url(r'^profile/$', views.view_profile, name='view_profile'),
url(r'^profile/edit/$', views.edit_profile, name='edit_profile'),
url(r'^change-password/$', views.change_password, name='change_password'),
url(r'^password_reset/$', auth_views.password_reset,{'email_template_name':'accounts/registration/password_reset_email.html',
'subject_template_name':'accounts/registration/password_reset_subject.txt',
'post_reset_redirect':'accounts:password_reset_done',
'from_email':'accounts@django.com',
},name='password_reset'),
url(r'^password_reset/done/$', auth_views.password_reset_done, {'template_name': 'accounts/registration/password_reset_done.html'}, name='password_reset_done'),
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我的应用程序名称中的帐户。您可以在其中放置自己的应用程序名称这是针对 Django 1.11