장고 reverse vs. reverse_lazy

치즈말랑이·2022년 2월 10일
0

reverse와 reverse_lazy가 있는 데요.
reverse가 동작하기 위해서는 장고 프로젝트에 대한 초기화 작업이 모두 완료되고 나서야 가능해집니다.
그런데 아래와 같은 코드에서
class MyViewClass:
... success_url = reverse("post_list")
reverse("post_list") 부분은 "클래스 변수" 부분으로서, 해당 소스파일이 임포트되면서 클래스 정의가 이뤄질 때 호출이 됩니다. 그런데 이 타이밍은 프로젝트 초기화 이전인거죠. 그래서 reverse에 실패하게 됩니다.
reverse_lazy를 쓰시게 되면, reverse를 수행하는 시점이 실제로 reverse 값을 참조하는 시점으로 지연되어 수행이 되기 때문에
class MyViewClass:
... success_url = reverse_lazy("post_list")
위 코드가 오류없이 동작하게 되는 것입니다.

출처 : https://www.facebook.com/groups/askdjango/permalink/3451735151508670/

그래서 클래스형 뷰 에서는 reverse_lazy를 쓰고 다른 def형뷰 or model에서는 def를 따로 지정해주니까 reverse를 사용한다고 이해했다.

profile
공부일기

0개의 댓글