Error: MyUser matching query does not exist - Django
Error: MyUser matching query does not exist - Django
我试图在 url 中包含用户名,但我无法再注销而不会收到此错误:
追溯到views.py中的这一行:
u = MyUser.objects.get(username=username)
知道我做错了什么吗?
这是我的 views.py:
@login_required
def account_home(request, username):
u = MyUser.objects.get(username=username)
return render(request, "accounts/account_home.html", {})
def auth_logout(request):
logout(request)
return HttpResponseRedirect('/')
urls.py
urlpatterns += patterns('accounts.views',
# url(r'^account/$', 'account_home', name='account_home'),
url(r'^(?P<username>[\w.@+-]+)/$', 'account_home', name='account_home'),
url(r'^logout/$', 'auth_logout', name='logout'),
url(r'^login/$', 'auth_login', name='login'),
url(r'^register/$', 'auth_register', name='register'),
)
谢谢大家!
问题出在您的 url 匹配正则表达式上。 Django 使用第一个匹配模式,/logout/
匹配 r'^(?P<username>[\w.@+-]+)/$'
- 它正在寻找名为 logout
.
的用户
您可以重新排列您的 url 模式以将用户名模式放在末尾,或者(更好的解决方案)在您的模式中放置明确的内容,例如 r'^/account/(?P<username>[\w.@+-]+)/$'
.
Django 使用与您的查询匹配的第一个视图。由于您的 account_home
视图是列表中的第一个视图,并且它匹配 /logout/
、/login/
和 /register/
,因此所有这些 url 都指向account_home
视图。由于您没有使用这些名称的用户,因此会出现该错误。
要修复它,您至少需要将 account_home
视图移动到列表的末尾。您可能还想添加一些代码来正确处理不存在的用户,例如get_object_or_404
我试图在 url 中包含用户名,但我无法再注销而不会收到此错误:
追溯到views.py中的这一行:
u = MyUser.objects.get(username=username)
知道我做错了什么吗?
这是我的 views.py:
@login_required
def account_home(request, username):
u = MyUser.objects.get(username=username)
return render(request, "accounts/account_home.html", {})
def auth_logout(request):
logout(request)
return HttpResponseRedirect('/')
urls.py
urlpatterns += patterns('accounts.views',
# url(r'^account/$', 'account_home', name='account_home'),
url(r'^(?P<username>[\w.@+-]+)/$', 'account_home', name='account_home'),
url(r'^logout/$', 'auth_logout', name='logout'),
url(r'^login/$', 'auth_login', name='login'),
url(r'^register/$', 'auth_register', name='register'),
)
谢谢大家!
问题出在您的 url 匹配正则表达式上。 Django 使用第一个匹配模式,/logout/
匹配 r'^(?P<username>[\w.@+-]+)/$'
- 它正在寻找名为 logout
.
您可以重新排列您的 url 模式以将用户名模式放在末尾,或者(更好的解决方案)在您的模式中放置明确的内容,例如 r'^/account/(?P<username>[\w.@+-]+)/$'
.
Django 使用与您的查询匹配的第一个视图。由于您的 account_home
视图是列表中的第一个视图,并且它匹配 /logout/
、/login/
和 /register/
,因此所有这些 url 都指向account_home
视图。由于您没有使用这些名称的用户,因此会出现该错误。
要修复它,您至少需要将 account_home
视图移动到列表的末尾。您可能还想添加一些代码来正确处理不存在的用户,例如get_object_or_404