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

seonjoo님의 프로필 이미지
seonjoo

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

DetailView를 이용한 개인 페이지 구현

django에서 context란

작성

·

1.1K

0

안녕하세요~ 강의 잘 보고 있습니다!

다름이 아니라 AccountDetailView에서 context_object_name 이라는 변수? 에서 context 라는게 장고에서는 어떤 의미인지 궁금합니다...

아 그리고 이건 약간 다른 질문인데요,

클래스 구조나 콜 순서가 궁금해서 내부 코드를 따라가다보니까

class SingleObjectMixin(ContextMixin):
...
    def get_context_object_name(selfobj):
        """Get the name to use for the object."""
        if self.context_object_name:
            return self.context_object_name
        elif isinstance(objmodels.Model):
            return obj._meta.model_name
        else:
            return None

이런 부분을 발견하긴 했는데..여기서 더 어떻게 파고 들어가야 할지 모르겠습니다...

함수나 클래스의 호출 과정을 보시는 방법이나 노하우? 같은게 있을까요?ㅎㅎ

답변 3

3

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

안녕하세요 선주님!
강좌 잘 들어주셔서 감사합니다.
질문 확인했습니다.

이해를 돕기 위해서
일단 유저가 요청을 보내는 것부터 시작을 해보겠습니다.

유저는 브라우저를 통해 서버에 요청을 보냅니다.

http://XXX.XXX/accounts/detail/1

accountapp 내부의 detail 페이지,
그 중에서도 1번 account 객체의 detail 페이지를 요청합니다.

그렇게 되면, 서버 단에서는 1번 account 객체의 상세정보를 되돌려주어야 합니다.

그 말은, 서버에서 1번 계정의 상세정보를 담은
HTML template 을 되돌려주어야 한다는거죠.

그렇다면 이 HTML 템플릿에서는,
해당 1번 계정 객체에  접근하여
해당 객체의 상세정보를 출력해야 합니다.

그렇다면 HTML 템플릿 단에서 편리하게
특정 변수 이름을 통해 객체에 접근을 할 수 있도록 해주어야 하겠죠?

view 단에서 그 특정 변수 이름을 지정해주는 것
context_object_name 이라고 생각을 하시면 됩니다.

context_object_name 을 target_account 로 지정을 해줌으로서
템플릿 단에서 요청이 들어온 해당 account 객체에 편하게 접근할 수 있는거죠.

해당 설정이 필수적인 설정은 아닙니다.
하지만 template 단에서 객체 접근에 대한 편의를 높이기 위해 
부가적으로 진행하는 내용이라고 이해해주시면 됩니다.

https://docs.djangoproject.com/en/3.2/topics/class-based-views/generic-display/#making-friendly-template-contexts

장고의 공식 문서에 해당 context_object_name 의 용법에 대해 나와있습니다.
영어로 된 공식 문서이긴 하지만,
더 자세하게 이해하고 싶으시다면 참고하시면 좋을것 같습니다.

답변이 도움되셨으면 좋겠네요!

좋은 주말 보내세요!

0

선생님 추가 질문이 있습니다.

http://XXX.XXX/accounts/detail/1

accountapp 내부의 detail 페이지,
그 중에서도 1번 account 객체의 detail 페이지를 요청합니다.

그렇게 되면, 서버 단에서는 1번 account 객체의 상세정보를 되돌려주어야 합니다.

라고하셧는데 그렇다면
detail/<int:pk><- 이렇게 url 에서 받은 변수를

class AccountDetailView(DetailView):
    model = User
    context_object_name = 'target_user'
    template_name = 'accountapp/detail.html'

이 클래스로 변수를 넘겨줘야하는거 같은데 어떻게 넘어간건가요??

DetailView 매개면수가 알아서 이 변수들을 걸러서 가공하게되는건가요?

0

와 감사합니다 앞선 강의부터 지금까지 다른 분들의 질문들을 하나씩 클릭하면서 어떻게 장고를 더 깊게 공부하면 되는지 길을 잡고있습니다.
 이 질문들만 따로 모아놓은 게시판이나 글들이 있으면 좋을거 같아요. 정말 꿀이네요~!

seonjoo님의 프로필 이미지
seonjoo

작성한 질문수

질문하기