Django 中的密码更改 URL 可以通过直接输入 URL 访问,但在单击"Change Password"按钮时失败



我正在制作一个基于William S. Vincent的"Django for Beginners"的网站。在我正在构建的项目中,我有一个主页,其中包含一个下拉菜单,其中包括"更改密码"选项等选项。当我直接转到 URL127.0.0.1:8000/users/password_change/时,我到达了正确的页面,但单击"更改密码"选项会出现以下错误:

"使用 newspaper_project.url 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:1. admin/2。用户/注册/[名称="注册"] 3.用户/登录/[名称='登录']...11. 文章/12.[名称="家"]。当前路径,用户/password_change/{% url 'password_change' %}。与这些都不匹配。

以下是代码的相关部分:

# /Desktop/news/templates/base.html
{% if user.is_authenticated %}
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link dropdown-toggle" href="#" id="userMenu"
data-toggle="dropdown" aria-haspopup="true" aria-expanded
="false">
{{ user.username }}
</a>
<div class="dropdown-menu dropdown-menu-right"
aria-labelledby="userMenu">
<a class="dropdown-item" href="{% url 'article_list' %}">Entries</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'password_change'
%}">Change password</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'logout' %}">
Log Out</a>
# /Desktop/news/users/urls.py
from django.urls import path
from .views import SignUpView

urlpatterns = [
path('signup/', SignUpView.as_view(), name='signup'),
]
# /Desktop/news/users/views.py
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import CreateView
from .forms import CustomUserCreationForm
class SignUpView(CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
# /Desktop/news/newspaper_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('users.urls')), #new
path('users/', include('django.contrib.auth.urls')), #new
path('articles/', include('articles.urls')), #new 
path('', include('pages.urls')), #new
]

base.html中指定的"article_list"和"注销"按钮,我可以通过直接输入127.0.0.1:8000/users/password_change/来访问password_change,但是单击该按钮会给我如上所述的错误。我将不胜感激这个问题的解决方案以及有关此问题发生原因的任何解释。

你的 password_change url 标签分布在两行上,所以 Django 不会将其识别为模板标签。确保它们都在一行中。

<a class="dropdown-item" href="{% url 'password_change' %}">Change password</a>

最新更新