학습주제
뷰(Views)와 탬플릿(Templates)
학습내용
장고에서는 모델을 통해서 question이나 choice를 통해서 데이터베이스에 정보를 저장하고 읽어온다면,
views에선 그렇게 읽어온 정보를 활용하게 됨.
지난 시간에 배운 views의 활용방법을 보면,

빈 요청이 들어오면 view.index로 연결되게 설정.
polls 앱은 전체 프로젝트 경로에서는 polls 아래로 들어옴. 이는 전체의 url.py를 보면 알 수 있음.

polls 이하의 주소들은 polls.urls로 들어감.
polls의 url.py에선 polls이하 아무것도 들어오지 않을경우, views.index으로 넘김

views.py에선 index가 실행됨.

이제 인덱스 메소드에서 출력되는 내용을 question을 불러와서 표시하는 것으로 바꿀 예정.

굳이 polls라고 쳐주지 않아도 됨.
latest_question_list = Question.objects.order_by('-pub_date')[:5]
output = '.'.join(q.question_text for q in latest_question_list)
를 인덱스 매소드 내용으로 추가한다. question 오브젝트를 pub_date의 역순으로 5개까지 리스트로 생성함.
이 리스트에서 반복문을 돎련서 q.question_text만 모음. 이걸 , 으로 join 함.


역순으로 나열된 것을 확인. 쿼리문을 보면

pub_date를 DESC 내림차순 정렬한 것을 알 수 있다.

개발자 도구로 보면 단순한 바디에 표시된 것을 알 수 있다. 이 html 활용해서 데이터를 잘 표시해주는 도구가 템플릿이다.
탬플릿을 만들기 위해, polls 폴더 내에 templates/polls 폴더를 생성. 안에 index.html을 만들어준다.


이렇게 만든 index.html이 views.py에서 제공이 되서, 사용자가 볼 수 있도록 하는 과정을 구현해본다.
from django.shortcuts import render
불러와준다.
render는 화면에 그려준다는 뜻.
index.html을 그려주는 역할을 한다.
return render(request, 'polls/index.html')

간단한 형태의 탬플릿이 구현되었다.
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'first_question': latest_question_list[0]}
return render(request, 'polls/index.html', context)
context를 render에 집어넣어준다.

이 index.html에선 first_question 이라는 이름으로 변수에 접근해줄 수 있다.

이렇게 넣으면,

그냥 문자열 그대로 출력된다.
따라서 view 변수의 값을 html 파일에서 치환해주기 위해서

중괄호로 변수를 묶어준다.

오브젝트가 제대로 뜨는 것을 확인하였다. 어떤 내용이냐면, model에서 __str__로 구현한 내용이 그대로 출력되었다.

render 함수는 요청값, 그려줄 html, html에 전달한 변수를 사용하여. 그려줄 html에서 views에서 전달받은 변수를 이용하여, 출력하고, render는 그 그려진 html을 받아 리퀘스트와 함께 리턴한다.
이 때 리턴 내용에 무엇무엇이 들어있는지 정확히 알지는 못한다. 현재까지.
