我有一个数据库,并启用了管理界面。当我进入管理界面并点击“用户”时,有一个用户的用户名为ayman
。我正在阅读一本名为“Packt Publishing,使用Django学习网站开发”的书中的教程。现在,在我的urls.py
中,这就是我所拥有的。
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^$', main_page),
url(r'^user/(\w+)/$', user_page),
)
在我的views.py
中,这是我的user_page
def user_page(request, username):
try:
user = User.objects.get(username=username)
except:
raise Http404(username +' not found.')
bookmarks = user.bookmark_set.all()
variables = {
'username': username,
'bookmarks': bookmarks
}
return render(request, 'user_page.html', variables)
我使用通用User
视图来管理我的用户。当我进入终端并做
$python manage.py shell
并做
>>> from django.contrib.auth.models import User
>>> from bookmarks.models import *
>>> user = User.objects.get(id=1)
>>> user
<User: ayman>
>>> user.username
u'ayman'
如您所见,用户名ayman
确实存在。现在,返回到URL和user_page
视图。在我的网络浏览器中,我去了
127.0.0.1/user/ayman/
urls.py
应该抓取ayman
并将其作为参数传递给user_page
,对吧?确实如此,但user_page
视图不断提高404错误,并显示ayman not found
。因此,username
中的user_page
参数实际上是ayman
,但它始终未通过
user = User.objects.get(username=username)
即使ayman
是我的数据库中的用户名。知道为什么吗?
答案 0 :(得分:4)
您正在使用裸except
子句,请尝试except User.DoesNotExist
。裸except
掩盖了真正的错误,缺少导入。顺便说一句。还有一个捷径:
from django.shortcuts import get_object_or_404
# ...
user = get_object_or_404(User, username=username)
第一个参数是模型或查询集,以下全部作为关键字参数传递给queryset.get()