Django_2)Template System

지비지비집·2023년 10월 17일
0

Django

목록 보기
2/14
post-thumbnail

우리는 Django의 중요한 구조이며 작동 순서인 URLs -> View -> Template 에 대해서 공부했다. 그 중 실제 Client에게 제공되는 Template에 조금 더 집중해보도록 하자.

DTL(Django Template Language)

우리는 흔히 html은 프로그래밍 언어로 간주하지 않는다. 그 대표적인 이유에는 어떤 것들이 있을까? 많은 이유들이 있겠지만 조건문, 반복문, 변수의 사용이 아마 제일 큰 작용을 했을 것이다. 분명 우리는 서비스를 제공할 때 필요한 기능들이기 때문에 Django는 이러한 기능을 제공한다.

1. 변수(Variable)

  • render 함수의 세번째 인자로 딕셔너리 데이터 사용
  • 딕셔너리 key에 해당하는 문자열이 template에서 사용 가능한 변수명이 됨
  • dot(.)를 사용하여 변수 속성에 접근할 수 있음
    {{ variable }} 처럼 중괄호 2개로 묶어서 사용

2. Filters

  • 표시할 변수를 수정할 때 사용
  • chained가 가능하며 일부 필터는 인자를 받기도 함
  • 약 60개의 built-in filters를 제공
    {{ varialbe|filter }} 의 형태로 사용

3. Tags

  • 반복 또는 논리를 수행하여 제어 흐름을 만듦(반복문, 조건문)
  • 일부 태그는 시작과 종료 태그가 필요
  • 약 24개의 built-in tags를 제공
    {% tag %} 처럼 중괄호와 %로 묶어서 사용

Filter와 Tags는 외우기 보다는 Django 공식문서를 참고하여 필요한 것들을 사용하는 것이 바람직하다. 위의 사용 예시는 아래 3가지 코드로 확인해보자. 코드만 보고 화면을 유추해 본 다음 실제로 적용하고 비교해본다면 공부에 큰 도움이 될 것이다.



Template 상속

혹시 Bootstrap을 사용해 본 경험이 있는가? 만약 있다면 어떤 점이 가장 불편했는가? 편하기 위해서 사용하는 라이브러리라고 하더라도 Head와 Body 아래에 꼭 적어줘야하는 코드들이 있고 이를 계속 복사, 붙여넣기를 했던 경험이 있을 것이다. 또한 html 파일은 !를 통해 자동완성이 된다고 하더라도 얼마나 많은 코드들이 중복되어있으며 가독성이 떨어지는가. 이를 해결하기 위해 Template 상속을 진행한다.

페이지의 공통요소를 포함하고, 하위 템플릿이 재정의 할 수 있는 공간을 정의하는 기본 skeleton 템플릿을 작성하여 상속 구조를 구축하는 것.

1. extends tag

상속 받을 template을 설정하는 태그로 하위 탬플릿에서 상위 템플릿 주소를 {% extends (주소) %} 태그 안에 작성

2. block tag

상위 template과 하위 template에 둘 다 작성해야하는 tag로 하위 template마다의 내용을 달리 넣을 수 있는 공간을 제공하는 것으로, {% block (고유이름) %} ~ 내용 ~ {% endblock (고유이름) %} 태그 사이에 작성

HTML Form

HTML Form은 HTTP 요청을 서버에 보내는 가장 편리한 방법으로 사용자로부터 할당된 데이터를 서버로 전송한다. form 태그 안에는 action과 method 2가지 속성이 있는데, action은 어디로, method는 어떤 방식으로 요청할지를 정하는 속성이다.

1. action

  • 입력 데이터가 전송될 URL을 지정
  • 만약 이 속성을 지정하지 않으면 데이터는 현재 form이 있는 페이지의 URL으로 보내짐

2. method

  • 데이터를 어떤 방식으로 보낼 것인지 정의
  • 데이터의 HTTP request methods(GET, POST)를 지정 -> DB에 저장 하는가?/ 안하는가?

3. input

사용자의 데이터를 입력 받을 수 있는 요소

  • type 속성은 데이터 유형을 정함
  • name 속성은 입력한 데이터에 붙이는 이름

4. form 데이터를 가져오는 방법

request.GET.get('input의 name값')

만약 여러 App들이 하나의 template를 상속받고 싶다면 어떻게 해야할까?
-> 가장 바깥 공간에 templates 폴더를 만들고 그 안에 base.html을 만든다.
-> settings.py에서 TEMPLATES 안에 'DIRS'를 [BASE_DIR / 'templates',]로 설정

profile
"정말 무엇인가를 이해한다면 전문용어를 모르는 사람에게도 설명할 수 있어야 한다." -리처드 파인만-

0개의 댓글