진짜 개발자
본문 바로가기

FrameWork/Django

Django - Template(템플릿) 사용

728x90

중요

 - 관습적으로 template들의 위치는 templates라는 폴더안에 모아 둔다.

- templates폴더의 위치는 보통 관습적으로 application아래에둔다.

- 여러 어플리케이션을 사용할 경우를 대비하여 application명으로 폴더를 따로 둬서 넣는다.


1. admin 페이지를 이용하여 Model에 데이터 추가하기

- 템플릿을 이용하여 사용자에게 보여질 페이지를 만들기 전에 우선 데이터베이스에 데이터를 채운다


1. admin 페이지로 이동하여 POLLS앱의 Questions 오브젝트를 클릭한다


2. 데이터를 추가하기 위해 ADD QUESTION을 클릭한다.


3. 적절히 데이터를 기입하고 SAVE를 클릭한다


4. 또하나의 데이터를 추가한다

5. 데이터가 모두 추가되었음을 확인할 수 있다.



2. Template 생성하기

1. Template가 담길 디렉토리 생성하기

1) polls 앱 하위에 templates라는 디렉토리를 생성한다 

- 장고에서 Template를 참조할때 기본적으로 templates라는 디렉토리를 참조한다

2) templates 하위에 다른 템플릿들과 구분하기위한 디렉토리를 하나더 생성한 후에 그안에 템플릿 파일을 생성한다

 templates 하위에 바로 템플릿 파일을 만들어도 되지만 한프로젝트에는 여러개의 앱이 존재할 수 있다 즉 polls앱이 아닌 다른 앱들에서도 

 같은 템플릿의 이름을 사용한다면 어떤 템플릿을 원하는지  구분하기가 어렵기 때문에 디렉토리를 따로 생성하는것이 좋다


2. views에서 템플릿을 이용하여 웹페이지를 띄우기

- views에서 사용자에게 보여질 페이지를 직접 만들 수도 있으나 이것은 하드 코딩이라고 하여 디자인이 바뀌는 경우 

  views의 코드 또한 같이 바뀌어야 하므로 매우 좋지 못한 코딩이라고 한다 때문에 템플릿을 적절히 사용하여

  템플릿에서 필요한 데이터는 views에서 model을 참조하여 전해주어 1) Model은 데이터만을 담당하고

 2) Template는 사용자에게 표현될 디자인만을 담당하며 3) View는 이들을 적절히 연결해줌으로써 유지보수를 편하게

하면된다.


1. 잘못된 예

- 아래 코드는 views에서 직접 사용자에게 보여질 페이지를 디자인한 경우이다

  이는 디자인이 바뀌는경우 view의 코드를 수정해야 하므로 적절하지 못한 코드이다


2. 옳은 예

1) views에서 Model을 참조하여 데이터를 가져온다

2) Template를 참조하여 사용자에게 보여질 페이지를 가져온다

3) views에서 사용자에게 보여질 페이지에 필요한 데이터(Model)를 Templates에게 넘겨줌으로써 완성된다 


3. shotcuts 사용 예

- shortcuts의 render를 사용하면 HttpResponse를 import하지 않음과 동시에 조금더 간단히 view를 작성할 수 있다

- render()함수의 첫번째 인자로는 request 오브젝트, 두번째 인자로는 템플릿 경로와 이름을

 세번째로 Model의 데이터를 파이썬의 딕셔너리 형태로 전달받는다