反向 'password_reset_done' 与命名空间的参数
Reverse for 'password_reset_done' with arguments with namespace
在 Django 1.8 下。我在我的应用程序中添加了命名空间,但现在注册页面出现问题。
Url: http://127.0.0.1:8000/accounts/password_reset/
在myapp/urls.py:
...
from django.contrib.auth.views import password_reset, password_reset_done
...
# include registration app urls
url(r'^accounts/', include('registration.urls')),
url(r'^accounts/password_reset/$', password_reset,
{'template_name': 'registration/password_reset.html'},
name='reset-password'),
url(r'^accounts/password_reset_success/$', password_reset_done,
{'template_name': 'registration/password_reset_done.html'},
name="password_reset_done"),
错误:
NoReverseMatch at /accounts/password_reset/
Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
在project/urls/myapp.py:
url(r'^', include('myapp.urls',
namespace='myapp', app_name='myapp')),
在 django.contrib.auth.views password_reset :
如果我替换
if post_reset_redirect is None:
post_reset_redirect = reverse('password_reset_done')
else:
post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":
** 和 **
if post_reset_redirect is None:
post_reset_redirect = reverse('myapp:password_reset_done')
else:
post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":
有效。
所以我想我必须将命名空间传递给某个地方的注册网址。
当您包含 password_reset
视图时,您可以在 URL 配置中设置自定义 post_reset_redirect
:
url(r'^accounts/password_reset/$', password_reset,
{'template_name': 'registration/password_reset.html', 'post_reset_redirect': reverse_lazy('myapp:password_reset_done')},
name='reset-password'),
但是,我认为您会发现使用命名空间还需要更改密码重置过程的其他部分(例如电子邮件模板)。最简单的解决方案是不为此应用使用命名空间。
当使用class based view参数名称改变时,需要使用success_url
:
path(
'/password/reset/',
auth_views.PasswordResetView.as_view(
template_name='registration/password_reset.html',
success_url=reverse_lazy('account:password-reset-done')),
name='password-reset'),
在 Django 1.8 下。我在我的应用程序中添加了命名空间,但现在注册页面出现问题。
Url: http://127.0.0.1:8000/accounts/password_reset/
在myapp/urls.py:
...
from django.contrib.auth.views import password_reset, password_reset_done
...
# include registration app urls
url(r'^accounts/', include('registration.urls')),
url(r'^accounts/password_reset/$', password_reset,
{'template_name': 'registration/password_reset.html'},
name='reset-password'),
url(r'^accounts/password_reset_success/$', password_reset_done,
{'template_name': 'registration/password_reset_done.html'},
name="password_reset_done"),
错误:
NoReverseMatch at /accounts/password_reset/
Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
在project/urls/myapp.py:
url(r'^', include('myapp.urls',
namespace='myapp', app_name='myapp')),
在 django.contrib.auth.views password_reset :
如果我替换
if post_reset_redirect is None:
post_reset_redirect = reverse('password_reset_done')
else:
post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":
** 和 **
if post_reset_redirect is None:
post_reset_redirect = reverse('myapp:password_reset_done')
else:
post_reset_redirect = resolve_url(post_reset_redirect)
if request.method == "POST":
有效。
所以我想我必须将命名空间传递给某个地方的注册网址。
当您包含 password_reset
视图时,您可以在 URL 配置中设置自定义 post_reset_redirect
:
url(r'^accounts/password_reset/$', password_reset,
{'template_name': 'registration/password_reset.html', 'post_reset_redirect': reverse_lazy('myapp:password_reset_done')},
name='reset-password'),
但是,我认为您会发现使用命名空间还需要更改密码重置过程的其他部分(例如电子邮件模板)。最简单的解决方案是不为此应用使用命名空间。
当使用class based view参数名称改变时,需要使用success_url
:
path(
'/password/reset/',
auth_views.PasswordResetView.as_view(
template_name='registration/password_reset.html',
success_url=reverse_lazy('account:password-reset-done')),
name='password-reset'),