카테고리 없음

index()뷰함수와 템플릿 작성

mcdn 2020. 9. 20. 15:50
반응형

{% if latest_question_list %}
    <ul>
        {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
        {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

templates라는 디렉토리를 만들어서 polls의 index.html를 작성했다. 

뷰함수와 템플릿은 서로에게 영향을 미치기 때문에 같이 작업하는 것이 보통이다. 템플릿 html->view.py로 

 

위의 템플릿을 설명하면 

뷰함수는 question객체들의 리스트가 들어있는 latest_question_list를 이 index.html템플릿에게 전달해줄 것이고 

템플릿은 뷰함수로부터 이를 받아 필요한 내용을 처리하게 된다. 

 

latest_question_list를 넘겨주는 index()뷰함수를 코딩하겠다. 

 

초기 views.py이다. 

 

from django.shortcuts import render
from polls.models import Question
# Create your views here.

def index(request):
    latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

작성을 끝낸 polls의 views.py이다. 

 

1. polls디렉토리의 models.py에서 question 테이블을 가져온다. 

2. index()를 정의한다. request는 필수 인자. 

3. 템플릿에게 넘겨줄 객체 이름은 latest_question_list이다. latest_question_list객체는 question 테이블 객체에서 pub_date 역순으로 정렬한 것 중 5개를 가져와서 만든다. 

4. 템플릿에게 넘겨주는 방식은 사전 타입으로 {}, 템플릿에게 사용될 변수명과 그 변수명에 해당하는 객체를 매핑하는 사전으로 context 변수를 만들어 render함수에 보내줄거다. 

5. render는 index.html 템플릿 파일에 context 변수를 적용하여 만들어줄 html텍스트를 만들고 이를 HttpResponse객체로 반환해준다. 

6. index뷰함수는 최종적으로 클라이언트에게 응답할 데이터인 HttpResponse 객체를 return 반환해준다. 

 

참고로 templates안의 index.html은 

settings.py 에서 templates로 설정했던 DIRS : BASE_DIR, templates에서 찾아낸다. 

 

또 참고로 render함수란 

템플릿 코드를 로딩하고 context변수를 적용하고 HttpResponse객체에 담는 작업을 모두 처리해주는 내장함수. 

항상 하는 작업이기에 장고는 이를 함수로 정의해주고 있다. 

반응형