Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Template

앞 장에서는 화면에 출력할 HTML 정보를 python 코드에 직접 하드코딩했다.
def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

뭐 어쨋든 웹 브라우저에 서버의 현재시간을 알려준다는 목적을 달성하기는 했지만, HTML 코드를 python 코드에 직접 넣는 것은 좋은 방법이다. 왜냐하면
  • 디자인이 변경됐다는 이유로 python code를 수정하는 좋지 않다. HTML 코드는 운영중에라도 자주 변경을 하게 된다. HTML 코드를 python code로 부터 분리하면, 좀 더 쉽게 디자인을 수정할 수 있을거다. 하드코딩 돼 있다면, 디자이너도 python 코드를 봐야 할 거다.
  • python 코드와 HTML은 두 개의 전혀다른 전문적인 분야이다. 각각의 전문가가 자신의 전문영역만을 수정하고 책임질 수 있도록 이 둘을 구분하는게 필요하다. python 개발자가 HTML을 수정할 필요가 없고, HTML/CSS 개발자가 python코드를 수정하는 건 좋지 않다.
  • Python 코드와 HTML 코드가 분리되면, python code와 HTML/CSS/디자인 작업을 독립적으로 동시에 진행할 수 있다.
Python 코드와 HTML 코드를 분리하면, 코드도 깔끔해지고 유지보수하기도 좋아진다. Django의 템플릿 시스템을 이용하면 두 개의 코드를 분리할 수 있다.

템플릿 시스템 기초

Django 템플릿은 문서의 표현과 데이터를 분리하기 위해서 사용한다. 템플릿은 문서가 출력되는 방법과 데이터(변수)를 문서 중간에 삽입하기 위한 규칙들을 포함하고 있다. 일반적을 웹 페이지는 동일한 틀을 유지한 상태에서 몇 개의 값들을 변경하는게 일반적이다. 템플릿은 고정된 HTML 문서의 틀안에서 변경되는 부분을 지정함으로써, 동적인 페이지를 만들 수 있다.

다음은 간단한 템플릿 예제다. 이 템플릿은 고객에게 물건 구입 정보를 보여준다.
<html>
	<head><title>물건 구입 내역</title></head>
<body>
	<h1>물건 구입 내역</h1>
<p>안녕하세요 {{person_name}}님 </p>

<p>저희 회사({{company}})로 부터 물건을 구입해주셔서 감사합니다. 주문하신 물건은 {{date}}에 도착할 예정입니다.<p> 

<p>물건 구입내역은 다음과 같습니다.</p>

<ul>
	{% for item in item_list%}
		<li>{{item}}</li>
	{% end %}
</ul>

<p>감사합니다.</p>
</body>
</html>
  • {{ person_name }}은 변수를 삽입하기 위해서 사용한다.