2009-09-03 5 views
9

내 URLconf는이 패턴이 포함되어장고 'URL'템플릿 태그 오류

url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"), 

을 그리고 나는이 같은 URL 태그와 템플릿에 그 반전을 시도했습니다

<a href="{% url logout next_page=request.path %}">logout</a> 

하지만 다음과 같은 오류가 계속 : 나는 django.contrib.auth.views.logout 생각

Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found 

을 옵션을하도록되어 next_page 매개 변수. 나는 분명히 뭔가 빠져 있다고 확신하지만, 그것이 무엇인지 모르겠습니다.

답변

7

네 말이 맞아 django.contrib.auth.views.logout은 선택적 "next_page"매개 변수를 허용하지만 "url"태그가보기가 아닌 urlconf 패턴과 일치한다는 것을 잊지 마십시오. 뷰의 매개 변수인지 아닌지를 인식합니다. 따라서 위 패턴에 대한 정규 표현식에서 "next_page"라는 이름의 그룹을 만들 필요가 있음을 알 수 있습니다.하지만 리디렉션을 처리하는 더 쉬운 방법이 있습니다 ...

django.contrib.auth.views.logout을 보면 "next_page"매개 변수가없는 경우 요청은 request.GET 또는 request.POST의 키 "redirect_field_name"과 함께 제공되는 URL로 리디렉션됩니다. 기본값은 "REDIRECT_FIELD_NAME"이며 기본값은 " 다음 것". 따라서 urlconf를 그대로두면 템플릿에서 다음과 같이 할 수 있습니다.

<a href='{% url logout %}?next={{ request.path }}'>logout</a> 
+0

매우 감사드립니다. 어떻게 REDIRECT_FIELD_NAME을 (를) 간과했는지 확실하지 않습니다. – saturdayplace

5

기본적으로 Django의 URL 디스패처는 urlconf와 해당 인수를보고 "이 인수를 어디에 둘지 모르겠다"고 말하면 urlconf와 urlconf 만보기 기능을 보지 않기 때문입니다. 그것의 패턴.

바로 지금 해당 인수에 대한 URL 패턴의 위치가 없습니다.

즉, 자신 만의 패턴을 작성하거나 자신의보기에서 호출했지만 기본 URL 패턴이 아닌 추가 인수를 사용하여 django.contrib.auth.views.logout을 호출 할 수 있습니다. 이 URL 패턴

하나는 당신을 위해 작동 할 수 있습니다 (테스트하지) :

url(r'^accounts/logout/(?P<next_page>.*)?$','django.contrib.auth.views.logout', name="logout"), 
url(r'^accounts/logout/$','django.contrib.auth.views.logout', kwargs={'next_page':None}, name="logout"), 

희망이 도움이!