인프런 커뮤니티 질문&답변

윤해빈님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

로그아웃 처리

resolve_url에 URL패턴을 쓸 수 있다는 의미가 잘 이해가 안갑니다.

해결된 질문

작성

·

271

1

이번 강의의 4분30초대에서 get_next_page 함수에 대해 설명해주신 부분이 잘 이해가 안가서 질문드립니다

resolve_url 에 URL 패턴을 쓸 수 있다고 하시고, urls.py에다가    

path('logout/', LogoutView.as_view(next_page=''), name='logout'),

라고 as_view 에다 next_page 를 넘겨준 것이 앞서 설명하신 것과 어떻게 연결되는지 잘 이해가 안갑니다.

next_page=''에다가 그냥 url='/instagram/' 했던 것 처럼 패턴네임을 줄 수 있다 이렇게 이해하면 되는걸까요?

답변 2

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

LogoutView 뷰는 Class Based View 입니다. CBV는 대개 next_page와 같은 클래스 변수로서의 설정값이 있고, 이를 활용하는 get_next_page와 같은 인스턴스 함수가 있습니다. get_next_page 함수 내에서 next_page 설정을 참조하는 거죠.

get_next_page 함수 내에서 next_page 설정값이 있을 경우, resolve_url을 통해서 URL Reverse를 수행한 문자열을 반환해주고 있습니다.

next_page와 같은 설정값은 해당 클래스 뷰에 직접적으로 설정하실 수도 있고, as_view 호출 시에 설정값을 지정하실 수도 있습니다.

그래서 LogoutView.as_view(next_page='/instagram/') 와 같이 쓰신다면, LogoutView.as_view 를 통해서 만들어지는 새로운 뷰 함수는 next_page='/instagram/' 가 적용된 뷰 함수가 됩니다.

그런데 위에서도 말씀드렸다시피 next_page 값은 get_next_page 함수 내에서 resolve_url이 적용이 되기에

그 값을 '/instagram/' 처럼 URL 문자열을 주실 수도 있겠지만, URL Reverse가 수행되도록 "instagram:post_list" 와 같이 지정하셔도 동작한다는 의미가 되겠습니다.

instagram 의 namespace이고, post_list는 path name입니다.
관련 코드 : https://github.com/askcompany-kr/django-with-react/blob/master/instagram/urls.py

살펴보시고, 조금이라도 궁금한 부분이 남아있으시면 추가 질문 주세요. :-)

질문이 해결되셨다면 본 질문의 상태를 해결됨으로 변경 부탁드립니다.

화이팅입니다. :-)

0

윤해빈님의 프로필 이미지
윤해빈
질문자

항상 자세하고 친절한 답변 감사드립니다.

정리하자면 LogoutView.as_view(next_page='instagram:post_list'), name='logout')

처럼 써서 url reverse가 수행되도록 할 수 있다는 의미가 맞을까요?

이진석님의 프로필 이미지
이진석
지식공유자

예. next_page에 지정된 인자는 URL Reverse가 수행될 수 있다로 이해하실 수 있습니다.

next_page에 지정된 값은 무조건 URL Reverse를 수행하게 되는 데요. URL Reverse에 실패할 경우 그 값을 그대로 사용하게 됩니다.

그러니 next_page="/instagram/" 으로 지정하시면 "/instagram/" 값은 당연히 URL Reverse에 실패하게 되겠죠. 그러니 "/instagram/" 값 그대로 사용이 될 것입니다.

화이팅입니다. :-)