2015-02-18 2 views
0

Я пытаюсь включить имя пользователя в URL, но я не могу больше выхода из системы не получаю эту ошибку:Ошибка: MyUser сопоставления запросов не существует - Django

enter image description here

Он прослеживает назад к этой линии in 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>[\[email protected]+-]+)/$', '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'), 
) 

Спасибо, ребята!

+0

Вы пытались изменить параметр имени пользователя на что-то вроде «пользователя», чтобы он не столкнулся, когда вы определяете u? – deweyredman

+1

Как выглядит ваш 'urls.py'? Похоже, вы пытаетесь использовать представление 'account_home' в контексте, в котором имя пользователя отсутствует или неверно, вероятно, в результате перенаправления на'/'после выхода из системы. –

+0

Я переадресовываюсь на «/» после выхода из системы. Где я должен перенаправить? @PeterDeGlopper Я добавил свой urls.py, а также – jph

ответ

0

Проблема заключается в том, что ваш url соответствует регулярным выражениям. Django использует первый шаблон соответствия, а /logout/ соответствует r'^(?P<username>[\[email protected]+-]+)/$' - он ищет пользователя с именем logout.

Вы можете либо изменить порядок шаблонов URL-адресов, чтобы поместить шаблон имени пользователя в конец, либо (лучшее решение) положить что-то однозначное в ваш шаблон, например r'^/account/(?P<username>[\[email protected]+-]+)/$'.

2

Django использует первое представление, соответствующее вашему запросу. Поскольку ваш вид account_home является первым видом в списке, и он соответствует /logout/, /login/ и /register/, все эти URL-адреса направлены на вид account_home. Поскольку у вас нет пользователя с этими именами, вы получаете эту ошибку.

Чтобы исправить это, вам нужно всего лишь переместить вид account_home в конец списка. Вероятно, вы также захотите добавить код, который надлежащим образом обрабатывает несуществующих пользователей, например. get_object_or_404

+0

Очевидно, мы согласны с причиной, а 'get_object_or_404' - хорошая практика, хотя в этом случае она оставила бы пользователя с другой проблемой. –

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