해결된 질문
작성
·
316
답변 1
1
안녕하세요.
redirect 함수는 내부 구현에서 resolve_url을 활용해서 이동할 주소를 얻습니다.
관련코드 : https://github.com/django/django/blob/3.2.15/django/shortcuts.py#L41
그리고 resolve_url 에서는 인자로 받는 객체에서 get_absolute_url 메서드를 지원하면 이 함수를 호출하여 url 문자열을 획득하고, 그 즉시 리턴하게 됩니다. get_absolute_url 메서드를 지원하지 않으면 URL Reverse를 진행하게 됩니다.
그러니
redirect("blog:post_list") 와 같이 호출이 된다면 "blog:post_list" 문자열에서는 당연히 get_absolute_url 메서드가 없으니 그대로 URL Reverse를 진행하게 되는 것이구요.
redirect(post) 호출 시에 Post 모델에서 get_absolute_url 을 구현하지 않았다면, post는 문자열도 아니기에 오류가 발생하게 됩니다.
마지막으로 redirect(post) 호출 시에 Post 모델에서 get_absolute_url이 구현되어있다면, 이 메서드를 호출해서 반환된 URL 문자열 주소로 이동을 하게 됩니다.
충분한 답변이 되었을까요?
궁금증이 해결되셨다면 본 질문의 상태를 해결됨으로 변경 부탁드립니다.
화이팅입니다. :-)
와 다음 강의 듣고 있었는데
바로 답변 달아주시다니 정말감사합니다
100% 이해 완료했습니다