【问题标题】:Error: MyUser matching query does not exist - Django错误:MyUser 匹配查询不存在 - Django
【发布时间】:2015-04-20 04:17:42
【问题描述】:

我正在尝试在 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'),
)

谢谢大家!

【问题讨论】:

  • 您是否尝试过将用户名参数更改为“user”之类的内容,以便在定义 u 时不会发生冲突?
  • 您的urls.py 是什么样的?您似乎正在尝试在用户名丢失或不正确的上下文中使用 account_home 视图,这可能是由于注销后重定向到 / 的结果。
  • 我在注销后重定向到“/”。我应该把它重定向到哪里? @PeterDeGlopper 我也添加了我的 urls.py

标签: python django django-views django-users


【解决方案1】:

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

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

【讨论】:

  • 显然我们同意原因,get_object_or_404 是一个很好的做法 - 尽管在这种情况下它会给用户留下不同的问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 2021-07-26
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多