2014-11-11 2 views
1

Я новичок в Django.Django не может разрешить имя URL-адреса

Код, похоже, не в состоянии разрешить мой URL-адрес «login», и я требую вашей помощи для продолжения моей разработки.

Ниже исключение я получаю:

Environment: 


Request Method: GET 
Request URL: http://localhost:9999/bz/logout/ 

Django Version: 1.7 
Python Version: 3.4.1 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'bz') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "D:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "D:\dev\python\eli\bz\views.py" in user_logout 
    102.  return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"}) 
File "D:\Python34\lib\site-packages\django\core\urlresolvers.py" in reverse 
    546.  return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 
File "D:\Python34\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
    463.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /bz/logout/ 
Exception Value: Reverse for 'login' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Это мой urls.py:

from django.conf.urls import patterns, url 

from bz import views 

urlpatterns = patterns('', 
    (r'^$', views.index), 
    url(r'^login/$', views.user_login, name='login'), 
    (r'^logout/$', views.user_logout), 
    (r'^register/$', views.register), 
) 

И это проблемный участок, где разрешение не удается:

def user_logout(request): 
    user = request.user 
    if user.is_authenticated: 
    logout(request) 
    return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"}) 
    else: 
    return render(request, 'bz/index.html', {}) 

Ваша помощь будет оценена.

спасибо.

ответ

2

Ну, ребята, нашли проблему. при использовании «reverse» я забыл добавить имя приложения. Итак, следующий трюк.

Вместо:

return HttpResponseRedirect(reverse('login'), {'logged_out_success_message': user.username + " logged out successfully"}) 

Я написал (добавление 'BZ:' в качестве префикса):

return HttpResponseRedirect(reverse('bz:login'), {'logged_out_success_message': user.username + " logged out successfully"}) 

И теперь он работает. Спасибо.

+0

В чем причина написания собственных функций входа и выхода из системы? Вы можете легко использовать декоратор '' @ login_required'' и включить в свой urls.py шаблоны из django.contrib.auth.views. – cezar

+0

Ну, так как я использую расширенную модель USerProfile, логина пользователя достаточно, потому что существование пользователя и его успешный вход в систему не подтверждают автоматическую проверку того, связан ли этот пользователь с UserProfile. – dotaneli

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