2012-08-05 2 views
1

django.contrib.auth.views.logout을 추가 기능을 추가하는 다른 함수로 래핑했습니다. 이것은 나의 새로운 logout_page입니다 :Django에서 로그 아웃 뷰에 코드를 추가하는 적절한 방법

logout() got an unexpected keyword argument 'next_page' 
:

views.py

from django.contrib.auth import logout 
def logout_page(request, *args, **kwargs): 
    from django.utils import timezone 
    user = request.user 
    profile = user.get_profile() 
    profile.last_logout = timezone.now() 
    profile.save() 
    logout(request, *args, **kwargs) 

urls.py

(r'^logout/$', 'main.views.logout_page', {'next_page': '/'}) 

그러나 나는 다음과 같은 오류를 받고 있어요

나는 왜 '넥스 t_page '로그 아웃에 ** kwargs가 포함되어있을 때 예기치 않은 인수입니다. 알고있는 한 django.contrib.auth의 로그 아웃에는 이러한 인수가 포함되어야합니다.

https://github.com/django/django/blob/master/django/contrib/auth/views.py

def logout(request, next_page=None, 
      template_name='registration/logged_out.html', 
      redirect_field_name=REDIRECT_FIELD_NAME, 
      current_app=None, extra_context=None): 
... 

가 어떻게이 문제를 해결할 수 : 소스에서?

답변

6

당신은 틀린 전화를 logout이라고합니다.

from django.contrib.auth import logout 

from django.contrib.auth.views import logout 
+0

오, 당신이 옳은 것을 . 나는 실수를하지 않았다. 나는 내 견해를 제외하고 올바른 수입을 사용하고 있었다고 생각한다. 감사! –

1

당신은 대신 from django.contrib.auth import logout의,보기, from django.contrib.auth.views import logout에서 로그 아웃을 가져와야해야합니다.

참고로 이러한 동작을 위해 로그 아웃 신호를 사용할 수 있습니다.

+0

큰 제안이지만, 미들웨어가없는 신호에서 request.user를 사용할 수 없다는 사실로 인해 복잡해질 것이라고 생각합니다. –

+0

@RobertSmith 관련 사용자는 인수로 인수로 전달되므로'request.user'에 액세스 할 필요가 없습니다. –

+0

@isbadawi 보낸 사람으로? –

0

login logout signals 난 당신과 같은 문제를 가지고이 간단한 해결 방법 사용을 참조하십시오 :

views.py :

def my_logout(request): 
    # Staff you want to do before logout 
    from django.http import HttpResponseRedirect 
    return HttpResponseRedirect("/logout2/") 

urls.py :

(r'^logout/$', 'views.my_logout'), 
url(r'^logout2/$', 
    django.contrib.auth.views.logout, 
    {'template_name': 'logged_out.html'}, # Next page 
    name='auth_logout'), 
관련 문제