인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

율리시스님의 프로필 이미지
율리시스

작성한 질문수

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

장고 기본 CBV API (Base Views)

template_name를 참조하는 방식

해결된 질문

작성

·

280

0

- 여러분의 질문을 고대하고 있습니다. :-)
- 질문 전에 검색을 먼저 해보세요. 사람 사는 게 다 비슷하다는 것을 알게 됩니다.
- 예의는 거침없이 질문하기 위한 최고의 발명품입니다.
- 100개의 설명이 스크린샷 한방 보다 못할 수 있습니다.
- 코드를 첨부하면 전세계 누구나 이해할 수 있는 질문이 됩니다.
- 하나의 질문에는 하나의 주제를 담아야 답변도 예리해집니다.
- 시행착오를 알려주시면 곧 바로 원하는 문제에 집중할 수 있습니다.

- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
 
안녕하세요 강사님.
root URL 정의 예시에서 template_name을 인스턴스 변수 또는 클래스 변수로 지정하시는 두가지 예시를 들어주셨는데요.
코드상에서 봤을때는 인스턴스 변수가 정의되어 있지 않으면 raise ImproperlyConfigured 에러를 일으키고 있고 이 때 template_name에 대한 클래스 변수를 다시 참조하는 코드는 보이지는 않는것 같습니다.
이부분은 어떤식으로 동작하는걸까요?? 클래스 변수로 지정해주고 해당 URL로 접근 후에 디버그로 돌려보면 이미 self.template_name은 정의된것으로 나오는것이 신기하네요.

답변 1

1

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

안녕하세요.

파이썬의 클래스 문법에서 클래스 변수와 인스턴스 변수 문법에 대해서 살펴보겠습니다.

인스턴스 내에서 self.template_name 으로 접근하였을 때,

1) 인스턴스 변수로서 template_name이 있는 지 먼저 찾습니다. 인스턴스 변수로서 그 이름의 값이 있으면 그 값을 사용하고

2) 인스턴스 변수로서 그 이름의 값이 없으면, 클래스 변수로서 template_name이 있는 지 찾습니다. 클래스 변수로서 그 이름의 값이 있으면 그 값을 사용하고

3) 없으면 AttributeError 예외를 발생시킵니다.

---

TemplateView.as_view(template_name="root.html") 코드에서

TemplateView 클래스만 봤을 때에는 클래스 변수 template_name = None 선언은 있지만, 인스턴스 변수 template_name은 없죠. 이때는 self.template_name 값은 None이 됩니다. 클래스 변수이죠.

그런데 .as_view(template_name="root.html") 지정을 통해 인스턴스 변수로서 template_name이 생성이 되었고. 이제 self.template_name 값은 "root.html" 이 됩니다. 인스턴스 변수입니다.

율리시스님의 프로필 이미지
율리시스
질문자

답변 감사합니다. 결국 인스턴스 변수를 참조하는것 자체가 인스턴스 변수 참조 후 클래스 변수까지 참조하는 것을 포함하는것이군요. 파이썬 문법 공부가 좀더 필요하겠네요 :)

율리시스님의 프로필 이미지
율리시스

작성한 질문수

질문하기