我有一个数据库并启用了管理界面。当我进入管理界面并单击“用户”时,有一个用户的用户名是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
View 来管理我的用户。当我进入终端并执行
$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
View 。在我的网络浏览器中,我访问了
127.0.0.1/user/ayman/
urls.py
应该捕获 ayman
并将其作为参数传递给 user_page
,对吗?确实如此,但 user_page
View 不断引发 404 错误,并显示 ayman not found
。因此,user_page
中的 username
参数实际上是 ayman
,但它始终失败
user = User.objects.get(username=username)
即使ayman
是我数据库中的用户名。知道为什么吗?
最佳答案
您使用的是裸 except
子句,请尝试 except User.DoesNotExist
。裸露的 except
掩盖了真正的错误,即缺少导入。顺便提一句。还有一个快捷方式:
from django.shortcuts import get_object_or_404
# ...
user = get_object_or_404(User, username=username)
第一个参数是模型或查询集,以下全部作为关键字参数传递给 queryset.get()
关于python - Django 在数据库中看不到用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940486/