오답노트

[Django] Template 본문

Python/Django

[Django] Template

권멋져 2022. 11. 15. 20:53

Template

사용자의 요청에 대해 View 함수에서 응답하는 HTML 파일을 장고에서는 템플릿이라고 한다.

 

Template 환경설정

프로젝트 파일 아래 settings.py에 TEMPLATES를 확인하자.

 

BACKEND는 템플릿을 만드는 엔진을 정의하는 곳이다. 여러 종류의 엔진이 존재하는데 스스로 찾아보자.

 

그리고 HTML 파일을 찾아가는 경로를 찾는 위치는 INSTALLED_APPS에 등록된 앱안에서 위에서부터 차례대로 들어가 

templates 라는 폴더를 찾는다. 만약 앱안에 templates 라는 폴더가 없다면 다음 앱을 찾는 방식이다.

 

만약 모든 앱에 templates라는 폴더가 없다면 TEMPLATES에 DIRS에 위치를 지정한 곳에서 찾는다.

 

템플릿을 사용하려면 위 두 디렉토리중 하나에는 반드시 templates 폴더를 만들도록 하자.

 

템플릿 응답

간단한 템플릿을 만들어 제대로 html이 불러와지는지 확인해보자.

위와 같이 템플릿을 만들었고 이를 요청해서 호출해보자.

 

render

views.py에서 render 함수를 사용하면 템플릿을 호출할 수 있다. 

이를 호출하기 위해 urls.py도 수정하자.

이제 기본페이지는 템플릿으로 출력될 것이다.

 

context

views.py에서 템플릿을 호출할 수 있다는 것을 알았다.

그렇다면 model에서 정보를 가져와 템플릿에 출력할 수 있을 것이다.

 

context는 view 함수에서 템플릿으로 전달하는 데이터이다. key:value 형식으로 여러 개의 데이터를 요소로 갖는 딕셔너리 형태이다.

 

model에서 테이블 정보를 받아 context로 템플릿에 출력 시켜보자

이전 포스트의 코드를 재사용했다.

render 함수내에 딕셔너리 형태로 key:value를 넣어주었다.

 

템플릿 또한 이전 테스트에 사용한 템플릿을 그대로 재사용했다. 템플릿에서 {{}}는 장고 템플릿 문법이다.

 

다음은 출력 결과이다.

path 중복

만약 동일한 이름의 템플릿이 다른 앱에도 존재한다면 어떻게 될까?

위에서 설명했듯 등록된 app 순서대로 찾으니 순서가 빠른 템플릿을 먼저 출력할 것이다.

 

그러면 내가 템플릿 이름은 같지만 원하는 앱에서 출력하게 하려면 어떻게 할까?

 

앱에서 만든 template 보다 한 층 더 디렉토리를 사용하면 된다.

예를 들어 ../template/myapp/test.html 로 만들어 놓으면 템플릿명이 중복이더라도 찾을 수 있다.

 

단, render 함수에서 템플릿을 지정할때 앱 이름을 같이 써야한다.

URL은 그대로 사용하면 된다.

 

템플릿 상속

위는 부모 템플릿이고

아래는 자식 템플릿이다.

 

자식 템플릿을 호출하면 아래와 같이 출력된다.

이를 활용해 반복되는 코드를 줄일 수 있다.

 

'Python > Django' 카테고리의 다른 글

[Django] Manager & QuerySet  (0) 2022.11.16
[Django] 모델 관계 설정  (0) 2022.11.15
[Django] View에서 Model 사용하기  (0) 2022.11.15
[Django] Model 작성하기  (0) 2022.11.15
[Django] View 작성하기  (0) 2022.11.15