NoReverseMatch at /password_reset_complete/ 'users' 不是已注册的命名空间



base urls.py:

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from users import views as user_views
urlpatterns = [
path('admin/', admin.site.urls),
path('register/', user_views.register , name='register'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='users/logged_out.html'), name='logout'),
path('password_reset/',
auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'),
name='password_reset'),
path('password_reset/done/',
auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'),
name='password_reset_done'),
path('password_reset_confirm/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'),
name='password_reset_confirm'),
path('password_reset_complete/',
auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'),
name='password_reset_complete'),
path('', include('learning_logs.urls')),
]

password_reset_confirm.html:

{% extends "learning_logs/base.html" %}
{% load bootstrap4 %}
{% block page_header %}
<h2>Reset your password.</h2>
{% endblock page_header %}
{% block content %}
<form method="post">
{% csrf_token %}
{%  bootstrap_form form %}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{% endblock content %}

password_reset_complete.html:

{% extends "learning_logs/base.html" %}
{% block content %}
<p>Password changed </p>
<a href="{% url 'login' %}">Sign in</a>
{% endblock content %}

我试图找到错误所指的对命名空间"用户"的引用。但我不知道来源在哪里。每当我填写用于重置密码的password_reset_confirm字段时,我都会收到此错误。有什么想法吗?

追踪:

Traceback (most recent call last):
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangourlsbase.py", line 72, in reverse
extra, resolver = resolver.namespace_dict[ns]
KeyError: 'users'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangoviewsgenericbase.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangoviewsgenericbase.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangoviewsgenericbase.py", line 158, in get
context = self.get_context_data(**kwargs)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangocontribauthviews.py", line 326, in get_context_data
context['login_url'] = resolve_url(settings.LOGIN_URL)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangoshortcuts.py", line 131, in resolve_url
return reverse(to, args=args, kwargs=kwargs)
File "C:UsersShebelidesktopjangoll_envlibsite-packagesdjangourlsbase.py", line 83, in reverse
raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'users' is not a registered namespace

此解决方案通常可能会在这里有所帮助!最好在settings.TEMPLATES中定义模板目录DIRS列表

一种常见的方法是在每个应用中有一个具有以下层次结构的应用:

testproject/
testproject/
settings.py
urls.py
....
users/
models.py
views.py
....
templates/
users/
password_reset.html
....
manage.py
....

然后,在settings.py中明确提及模板 DIR:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'users/templates'
],
....
}
]

这将避免 Django 混淆。现在,您可以添加上面提到的template_name,例如:template_name='users/password_reset.html'

settings.py我有:LOGIN_URL = 'users:login应该LOGIN_URL = 'login'

最新更新