错误:MyUser匹配查询不存在 - Django

时间:2015-02-18 23:20:33

标签: python django django-views django-users

我正在尝试在网址中包含用户名,但我无法再注销而不会收到此错误:

enter image description here

它追溯到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'),
)

谢谢你们!

2 个答案:

答案 0 :(得分:2)

Django使用与您的查询匹配的第一个视图。由于您的account_home视图是列表中的第一个视图,并且它与/logout//login//register/匹配,因此所有这些网址都指向account_home视图。由于您没有拥有这些名称的用户,因此会收到该错误。

要修复它,至少需要做的是将account_home视图移动到列表的末尾。您可能还想添加一些正确处理不存在的用户的代码,例如: get_object_or_404

答案 1 :(得分:0)

问题在于你的网址匹配正则表达式。 Django使用第一个匹配模式,/logout/匹配r'^(?P<username>[\w.@+-]+)/$' - 它正在寻找名为logout的用户。

您可以重新排序网址模式以将用户名模式放在最后,或者(更好的解决方案)在您的模式中添加一些明确的内容,例如r'^/account/(?P<username>[\w.@+-]+)/$'