일상코딩/노트

Django : Template Language (DTL)

코딩애벌레 2024. 3. 14. 02:24

벌써 django의 3번째 시간이다. 이전 시간에 흐름을 대충 알았다면 단순히 html 페이지를 띄우는 거에서 다양한 방식으로 랜더링 할 수 있는 심화 과정이다. (물론 심화 아닌 심화..) 여기서부터는 헷갈리는 부분이 많아서 천천히라도 정확하게 이해하는 것이 좋을 것 같다.


 저번 시간에는 index 페이지를 띄우기 위한 설정들 U-V-T : urls.py - Views.py - Templates 를 살펴보았다. 이어서 공부 할 예정이므로 미리 설정들을 보여주자면

urls.py와 views.py 설정
templates 내부의 articles 폴더 내부의 index.html 작성

 

여기까지는 잘 따라 왔을 것이다. 혹시나 project의 settings.py 에서 app 연결을 빼먹진 않았는지도 한번 확인해주면 좋다.

 

그럼 로그인을 하려는 페이지 혹은 접속하는 페이지를 만든다고 생각해보자. 일반적으로 출력되는 안녕하세요 뒤에 사용자의 이름을 나오게 하려면 어떻게 할까? 나를 제외한 CodingLarva가 아니기 때문에 html에 글자를 명시하는 것 보다는 다른 형태로 데이터를 호출해야 하지 않을까?

이번에는 과정을 거꾸로 올라가보자. index.html에 데이터를 넣어줘야 하는 상황이라면 이전 상황에서부터 데이터가 넘어와야한다. 결국 Views 함수에서부터 넘어 오는 것을 쉽게 눈치 채야 한다.

결국 index.html을 담당하는 index 함수가 rendering 되는 과정 펼쳐준다고 생각하면 이해하기 쉽다.

 

HTML의 콘텐츠를 변수의 값에 따라 바꾸기를 해보자

django의 render 함수는 3번째 선택 인자를 갖고 있다. 작성 전 도움말을 살펴 볼 수 있다

 

딕셔너리 형태로 templates에 전달할 context data를 나타낸다. 이는 전달된 templates 에서 변수로 사용될 수 있다. 위의 예시로는 templates의 articles dir 내부의 index.html로 전달된 것이므로 우리는 이제 index.html 파일에서 context를 다룰 수 있다. 물론 호출하는 형태로 말이다.

데이터를 불러오는 방법은 {{ }} 을 사용하는 것이며 내부에는 context의 key값이 쓰이게 된다. (바로 아래에 내용 나옴!!)

 

 

그래서 {{ }} 가 뭔데?

 

Django Template Language (DTL)

: Template에서 조건, 반복, 변수 등의 프로그래밍적 기능을 제공하는 시스템

: Django 프레임 워크를 통해 HTML을 보다 동적으로 만들수 있다

  • Variable : 변수
  • Filters : 필터
  • Tags : 태그
  • Comments : 코맨트

Variable

  • render 함수의 세번째 인자로 딕셔너리 데이터를 사용
  • 딕셔너리{ 'key': value }에서  key에 해당하는 문자열이 template에서 사용 가능한 변수명
  • dot(' . ')을 사용하여 변수 속성에 접근할 수 있음 (key 값으로 불러온 내부에 속성이 추가로 있다면 접근)

 

Filters

  • 표시할 변수를 수정할 때 사용 (변수 + ' | ' + 필터) "| 는 shift + 역슬래시(\)"
  • 연속해서(chained) 사용이 가능하며 일부 Filter는 인자를 받기도 한다
  • 약 60개의 built-in template filters가 있다

이제는 함수를 수정하고있는 페이지라면 views.py, 본문을 작성하고 있다면 templates의 html 파일임을 파악해야한다

 

Tags

  • 반복 또는 논리를 수행하여 제어하고 흐름을 만든다
  • 일부 태그는 시작과 종료 태그가 필요하다
  • 약 24개의 built-in templates tags를 제공한다
  • 화면에 출력되지 않고 기능을 담당하는 역할로 {% tag %}를 사용하며 파이썬과 동일하게 반복문 for, 조건문 if를 포함한다

 

Comments

  • 주석
  • {# 내용 #} 혹은 {% comment %} {% endcomment %}로 전체를 감쌀 수 있다 주로 후자가 사용된다
  • 단축키는 다른 주석 처리와 동일하게 Ctrl + ' / '


위에서 배운 것들을 실습해보자.

위의 데이터를 제공해보자

  1. 운동할 부위는 랜덤으로 뽑는다
  2. 뽑힌 부위의 글자수를 출력한다
  3. 분할 스케쥴의 세부 사항을 모두 출력한다

환경을 먼저 구축하자. 이제는 외워서 거뜬하게 할 수 있다

 

프로젝트 생성시에는 ' . ' 을 붙이는게 편하고, app은 ' . '을 붙이지 않는 것이 편하다. 경로 설정시 헷갈릴 수 있으니 조심!!

 

app을 설치했을때 가장 먼저 해야하는 것은 반드시 프로젝트 폴더 내부의 settings.py 설정

 

나는 u-v-t로 외우긴 했는데, 다들 편한 방식을 외우면 좋다. 내 친구는 'u' ni 'v' ersi 't' y 외워서 순서로하던데 ㅋㅋㅋ

 

한번에 구현하려 하지 말고 페이지를 먼저 띄워보자. 여기서 주의해야할 점은 index를 생각없이 쓰면 안되고, 다음 어떻게 쓰이는지 생각하자

 

위(urls.py) 아래(views.py) 각 쓰이는 부분이 어디로 가는지 꼭 잊지말자.

 

html 페이지 구성(미완성)

 

서버 가동후 미완성인 페이지를 먼저 확인해보자. 빨간 경고문은 다음 수업때 안보게 될 거니 걱정안해도된다.

 

url에 꼭 index를 붙여줘야한다. 왜? 우리는 index로 요청했을때로 정의했으니까~

 

다시 돌아와서 view함수부터 하자. (u:urls.py는 변경사항이 없지않은가!) List데이터 생성, dictionary 형태로 변수(Variable)를 넘기는 것이 규칙이므로 딕셔너리 형태로 가공, render의 3번째 인자로 넘겨준다.

 

 

각 작성했던 html 부분이다 진짜 신기해서 화장실갔다.

 

 

 

 


물론 tags와 filters를 모두 외울 수 없으니 공식문서를 참고할 수 있다.

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

스크롤이 굉장히 길기 때문에 오른쪽 contents 항목에서 내가 원하는 것을 찾아서 사용하면 된다. 주의할 점은 Document 버전을 본인의 django 버전과 맞춰야한다

 

 


솔직히 한두번만에 이런걸 구현할 수 있을리가 없다. css는 검색하면서 한다고해도 Back-end는 외우는 것이 대부분이다. 또한 알고있어야 사용이 가능하니까. 그래도 파이썬을 처음 배우기 시작하고 알고리즘만 풀다가 친숙한 Tags를 사용한다던가. 뭔가 여태 떡밥을 뿌렸던 정보들이 회수되는 기분이랄까? 솔직히 ... 알고리즘도 재밌고 프론트도 재밌고 백도 재밌다~~~ 뿌듯해

728x90