작성
·
142
답변 1
0
안녕하세요.
instagram/post_form.html 내에서 {{ Post객체.get_absolute_url }}
을 수행할려면,
Post객체의 get_absolute_url 메서드 구현을 보시면, 그 역할이 현 Post객체에 대한 detail view가 호출될 수 있는 URL 문자열을 완성하는 것인데요. 이는 DB에 저장된 Post에 대해서만 수행을 할 수 있습니다. DB에 저장되지 않은 Post은 존재하지 않는 것이기에 조회할 수가 없는 거죠.
그리고 DB에 저장된 모든 모델 객체는 self.pk 값이 1이상의 자연수값을 가집니다. DB에 저장되지 않으면 None값을 가지게 되구요.
---
instagram/post_form.html 내에서 "내용으로" 링크는
그럼 "내용으로" 링크를 보여줄 지 말지를 결정하기 위해서 form.instance 값으로 if 분기를 탔었구요.
그런데, form.instance 값은 post_new 뷰를 통한 처리에서도, post_edit 뷰를 통한 처리에서도 None이 아닌 Post 객체로 값이 지정되어있었습니다. 이는 장고 ModelForm 내부적으로 구현이 그렇게 되어있는 것이구요.
post_new 뷰와 post_edit 뷰 모두 {% if form.instance %} 는 참(True)이기에, 위에서 말씀드린 "내용으로 링크는 새 포스팅 쓰기 시에는 보여지지 않아야 합니다." 상황에 맞지 않게 됩니다.
그래서 post_form.html 템플릿에서 post_new와 post_edit 상황을 구별할 수 있도록,
그럼 post_form.html 템플릿에서는 {% if post %} 분기는 post_edit 시에만 수행이 되어, 포스팅 수정시에만 "내용으로" 링크를 렌더링하게 됩니다.
설명이 조금 길었는 데요. 이해하시는 데에 도움이 되셨으면 합니다.
확인해보시고 추가 질문 있으시면 언제든 편히 남겨주세요.
질문이 해결되셨으면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다. 이때 제목에 "[해결]"을 붙이시는 것이 아니라, 인프런 페이지에서 해결됨으로 변경하는 별도의 메뉴가 있습니다.
화이팅입니다. :-)