我有以下url:
urlspatterns=[ path('<str:urlsername>/', views.profile, name='profile'),
path('login/', auth_views.LoginView.as_view(),name ='login'),
path('logout/', auth_views.LogoutView.as_view()),
path('password_change/', auth_views.PasswordChangeView.as_view(),name='password_change'),]
视图中第一个url是这样的:
def profile(request, username):
user = get_object_or_404(User, username = username)
posts = Post.objects.filter(author = user).order_by('-pub_date')
return render(request,'profile.html', {'posts':posts,'user':user})
所以当我进入登录,注销或password_change页面时我得到了错误" page is not found">
Request Method: GET
Request URL: http://127.0.0.1:8000/password_change/
Raised by: posts.views.profile
但是如果我评论配置文件视图和它的url一切都工作得很好。为什么url 'logout'等转到配置文件视图?
我认为password_change
将首先匹配<str:urlsername>
。因此,解决方案是将您的url模式更改为下面的代码。
urlspatterns=[
path('login/', auth_views.LoginView.as_view(),name ='login'),
path('logout/', auth_views.LogoutView.as_view()),
path('password_change/', auth_views.PasswordChangeView.as_view(),name='password_change'),
path('<str:urlsername>/', views.profile, name='profile')
]