/password\u reset\u complete/“users”处的NoReverseMatch不是注册的命名空间

2024-09-30 14:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

基本URL.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')),
]

密码\u重置\u确认.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 %}

密码_reset _complete.html:

{% extends "learning_logs/base.html" %}

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

我试图找到错误所指的命名空间“users”的引用。但我不知道源头在哪里。每当我填写密码重置确认字段以重置密码时,就会出现此错误。有什么想法吗

回溯:

Traceback (most recent call last):
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\urls\base.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:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\views\generic\base.py", line 158, in get
    context = self.get_context_data(**kwargs)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\contrib\auth\views.py", line 326, in get_context_data
    context['login_url'] = resolve_url(settings.LOGIN_URL)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\shortcuts.py", line 131, in resolve_url
    return reverse(to, args=args, kwargs=kwargs)
  File "C:\Users\Shebeli\desktop\jango\ll_env\lib\site-packages\django\urls\base.py", line 83, in reverse
    raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'users' is not a registered namespace

Tags: pathdjangonameinpyhtmlsitepassword
2条回答

在{}我有: LOGIN_URL = 'users:login应该是{}

此解决方案通常在这里会有所帮助!最好在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='users/password_reset.html'

相关问题 更多 >