/accounts/password_reset/ 处的 NoReverseMatch
NoReverseMatch at /accounts/password_reset/
我正在为我正在处理的 Django 项目进行身份验证。由于某些原因,我收到错误 Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name.
我将所有身份验证都放在 accounts
应用程序中。
这是基础 urls.py
文件的内容:
from django.contrib import admin
from django.urls import path, include
from accounts import urls as accounts_urls
from core import urls as core_urls
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('accounts/', include(accounts_urls, namespace='accounts')),
path('core/', include(core_urls, namespace='core')),
]
这是 urls.py
文件的内容(在帐户应用程序中):
from django.urls import path, reverse_lazy
from django.contrib.auth import views as auth_views
from . import views as accounts_views
app_name = 'accounts'
urlpatterns = [
path('signup/', accounts_views.signup, name='signup'),
path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('account_activation_sent/', accounts_views.account_activation_sent, name='account_activation_sent'),
path('activate/<uidb64>/<token>/', accounts_views.activate, name='activate'),
path('password_reset/', auth_views.PasswordResetView.as_view(
template_name='accounts/password_reset.html',
email_template_name='accounts/password_reset_email.html',
subject_template_name='accounts/password_reset_subject.txt'
), name='password_reset'),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(
template_name='accounts/password_reset_done.html'
), name='password_reset_done'),
path('password_reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='accounts/password_reset_confirm.html'
), name='password_reset_confirm'),
path('password_reset/complete/', auth_views.PasswordResetCompleteView.as_view(
template_name='accounts/password_reset_complete.html'
), name='password_reset_complete'),
]
这是 accounts/templates
目录结构:
- 模板/
- 帐户/
- password_reset.html
- password_reset_email.html
- password_reset_done.html
- password_reset_confirm.html
- password_reset_complete.html
到目前为止,我没有发现我所做的有任何问题。任何大开眼界的人将不胜感激,谢谢!
因为你的 password_reset_done
在 accounts
下命名空间,你需要反转 accounts:password_reset_done
.
希望对您有所帮助。
Django 验证视图不使用命名空间 when reversing urls。这意味着它不适用于您当前的网址,因为您有 app_name = 'account'
和 namespace='accounts'
.
最简单的解决方案是删除 accounts
应用名称和命名空间(或将密码 URL 模式移动到另一个没有命名空间的 urls.py
。
可以使用命名空间对密码视图进行子类化和反转,但是需要进行大量更改。
我想通了!因为我想更好地控制 URL,所以我更改了默认的密码重置模式。我也一心想使用名称空间,所以我更改了 PasswordResetView 和 PasswordResetConfirmView 中的默认 success_url
属性以使用名称空间。这就是我的意思:
from django.urls import path, reverse_lazy, include
from django.contrib.auth import views as auth_views
# Add other necessary imports
app_name = 'accounts'
urlpatterns = [
path('password_reset/', auth_views.PasswordResetView.as_view(
template_name='accounts/password_reset.html',
email_template_name='accounts/password_reset_email.html',
subject_template_name='accounts/password_reset_subject.txt',
success_url=reverse_lazy('accounts:password_reset_done')
), name='password_reset'),
path('password_reset_done/', auth_views.PasswordResetDoneView.as_view(
template_name='accounts/password_reset_done.html'
), name='password_reset_done'),
path('password_reset_<uidb64>_<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='accounts/password_reset_confirm.html',
success_url=reverse_lazy('accounts:password_reset_complete')
), name='password_reset_confirm'),
path('password_reset_complete/', auth_views.PasswordResetCompleteView.as_view(
template_name='accounts/password_reset_complete.html'
), name='password_reset_complete'),
]
Caspian 我相信,您找到了解决我的问题的方法,
从 Django 2.0 迁移到 2.1,我疯狂地尝试将我的密码应用程序更正为新的必需配置...我无法理解问题...我没有改进您的解决方案,但这里有我的 URL 代码,它确实确认引入 "success_url=reverse_lazy" 您的解决方案效果很好。
path('password_reset/',
PasswordResetView.as_view(
template_name='app98/password_reset.html',
email_template_name='app98/password_reset_email.html',
subject_template_name='app98/password_reset_subject.txt',
success_url=reverse_lazy('ns_app98:password_reset_done')),
name='password_reset'),
path('password_reset_done/',
PasswordResetDoneView.as_view(
template_name='app98/password_reset_done.html'),
name='password_reset_done'),
path('password_reset_<uidb64>_<token>/',
PasswordResetConfirmView.as_view(
template_name='app98/password_reset_confirm.html',
success_url=reverse_lazy('app98:password_reset_complete')),
name='password_reset_confirm'),
path('password_reset_complete/',
PasswordResetCompleteView.as_view(
template_name='app98/password_reset_complete.html'),
name='password_reset_complete'),
]
我正在为我正在处理的 Django 项目进行身份验证。由于某些原因,我收到错误 Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name.
我将所有身份验证都放在 accounts
应用程序中。
这是基础 urls.py
文件的内容:
from django.contrib import admin
from django.urls import path, include
from accounts import urls as accounts_urls
from core import urls as core_urls
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('accounts/', include(accounts_urls, namespace='accounts')),
path('core/', include(core_urls, namespace='core')),
]
这是 urls.py
文件的内容(在帐户应用程序中):
from django.urls import path, reverse_lazy
from django.contrib.auth import views as auth_views
from . import views as accounts_views
app_name = 'accounts'
urlpatterns = [
path('signup/', accounts_views.signup, name='signup'),
path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('account_activation_sent/', accounts_views.account_activation_sent, name='account_activation_sent'),
path('activate/<uidb64>/<token>/', accounts_views.activate, name='activate'),
path('password_reset/', auth_views.PasswordResetView.as_view(
template_name='accounts/password_reset.html',
email_template_name='accounts/password_reset_email.html',
subject_template_name='accounts/password_reset_subject.txt'
), name='password_reset'),
path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(
template_name='accounts/password_reset_done.html'
), name='password_reset_done'),
path('password_reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='accounts/password_reset_confirm.html'
), name='password_reset_confirm'),
path('password_reset/complete/', auth_views.PasswordResetCompleteView.as_view(
template_name='accounts/password_reset_complete.html'
), name='password_reset_complete'),
]
这是 accounts/templates
目录结构:
- 模板/
- 帐户/
- password_reset.html
- password_reset_email.html
- password_reset_done.html
- password_reset_confirm.html
- password_reset_complete.html
- 帐户/
到目前为止,我没有发现我所做的有任何问题。任何大开眼界的人将不胜感激,谢谢!
因为你的 password_reset_done
在 accounts
下命名空间,你需要反转 accounts:password_reset_done
.
希望对您有所帮助。
Django 验证视图不使用命名空间 when reversing urls。这意味着它不适用于您当前的网址,因为您有 app_name = 'account'
和 namespace='accounts'
.
最简单的解决方案是删除 accounts
应用名称和命名空间(或将密码 URL 模式移动到另一个没有命名空间的 urls.py
。
可以使用命名空间对密码视图进行子类化和反转,但是需要进行大量更改。
我想通了!因为我想更好地控制 URL,所以我更改了默认的密码重置模式。我也一心想使用名称空间,所以我更改了 PasswordResetView 和 PasswordResetConfirmView 中的默认 success_url
属性以使用名称空间。这就是我的意思:
from django.urls import path, reverse_lazy, include
from django.contrib.auth import views as auth_views
# Add other necessary imports
app_name = 'accounts'
urlpatterns = [
path('password_reset/', auth_views.PasswordResetView.as_view(
template_name='accounts/password_reset.html',
email_template_name='accounts/password_reset_email.html',
subject_template_name='accounts/password_reset_subject.txt',
success_url=reverse_lazy('accounts:password_reset_done')
), name='password_reset'),
path('password_reset_done/', auth_views.PasswordResetDoneView.as_view(
template_name='accounts/password_reset_done.html'
), name='password_reset_done'),
path('password_reset_<uidb64>_<token>/', auth_views.PasswordResetConfirmView.as_view(
template_name='accounts/password_reset_confirm.html',
success_url=reverse_lazy('accounts:password_reset_complete')
), name='password_reset_confirm'),
path('password_reset_complete/', auth_views.PasswordResetCompleteView.as_view(
template_name='accounts/password_reset_complete.html'
), name='password_reset_complete'),
]
Caspian 我相信,您找到了解决我的问题的方法,
从 Django 2.0 迁移到 2.1,我疯狂地尝试将我的密码应用程序更正为新的必需配置...我无法理解问题...我没有改进您的解决方案,但这里有我的 URL 代码,它确实确认引入 "success_url=reverse_lazy" 您的解决方案效果很好。
path('password_reset/',
PasswordResetView.as_view(
template_name='app98/password_reset.html',
email_template_name='app98/password_reset_email.html',
subject_template_name='app98/password_reset_subject.txt',
success_url=reverse_lazy('ns_app98:password_reset_done')),
name='password_reset'),
path('password_reset_done/',
PasswordResetDoneView.as_view(
template_name='app98/password_reset_done.html'),
name='password_reset_done'),
path('password_reset_<uidb64>_<token>/',
PasswordResetConfirmView.as_view(
template_name='app98/password_reset_confirm.html',
success_url=reverse_lazy('app98:password_reset_complete')),
name='password_reset_confirm'),
path('password_reset_complete/',
PasswordResetCompleteView.as_view(
template_name='app98/password_reset_complete.html'),
name='password_reset_complete'),
]