2

У меня есть база данных и активирован интерфейс администратора. Когда я перехожу к интерфейсу администратора и нажимаю «Пользователи», есть один пользователь с именем пользователя ayman. Я следую учебнику, сделанному в книге под названием «Packt Publishing, Learning Website Development с Django». Теперь, в моем urls.py, это то, что у меня есть.Django не видит пользователей в базе данных?

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 это имя пользователя в моей базе данных. Любая идея почему?

+3

Вы используете голую 'except'. Если вы измените это на 'except User.DoesNotExist:', вы получите трассировку? – sk1p

+1

@ sk1p дает имяError at/user/ayman/и говорит, что глобальное имя «Пользователь» не определено. – user2817200

+2

Тогда вам нужно сделать 'из django.contrib.auth.models import User' –

ответ

4

Вы используете огороженное предложение except, попробуйте except User.DoesNotExist. Голый except маскирует реальную ошибку, отсутствующий импорт. Btw. есть также ярлык для этого:

from django.shortcuts import get_object_or_404 
# ... 
user = get_object_or_404(User, username=username) 

Первый аргумент является моделью или QuerySet, следующие все передается в качестве ключевых аргументов в queryset.get()

Смежные вопросы