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