알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Template 시스템 사용하기 본문

Web /Django

Template 시스템 사용하기

백곳 2017. 8. 12. 10:56

Template 시스템 사용하기


poll 어플리케이션의 detail() view 로 되돌아 가봅시다. 

context 변수 question 이 주어졌을때, polls/detail.html 라는 template 을 만들고 어떻게 보이는지 테스트 해보도록 하겠습니다. 


polls/templates/polls/detail.html

<h1>{{ question.question_text }}</h1>

<ul>

{% for choice in question.choice_set.all %}

    <li>{{ choice.choice_text }}</li>

{% endfor %}

</ul>


일단 이렇게 적어 줍니다. 

데이터를 따라 가보겠습니다. 


question.question_text 은 

polls/views.py

from django.shortcuts import get_object_or_404, render

# Create your views here.
from django.http import HttpResponse
from .models import Question

def detail(request,question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question}


에서 question = get_object_or_404(Question, pk=question_id) 에서 

웹페이지를 호출시에 http://10.23.10.232:8888/polls/1/ 이렇게 하면 

question = get_object_or_404(Question, pk=1) 이 실행 되며 

question 에는 

의 id =1 의 데이터를 줍니다. 


그리고는 polls/templates/polls/detail.html 의 {{ question.question_text }} 에 값을 넣어 주게 됩니다. 


question.choice_set.all은 해당 Question모델을 foreign key로 참조하는 모든 Choice 모델을 가져온다. 


현재 값이 없으니 테스트로 만들어 주겠습니다. 


관리자 페이지에서 Choice 모델을 제어 할수 있게 


polls/admin.py


from django.contrib import admin

# Register your models here.
from .models import Question
from .models import Choice
 
admin.site.register(Question)
admin.site.register(Choice)

admin.site.register(Choice) 을 추가 해주고 

sudo service apache2 restart


http://10.23.10.232:8888/admin/ 접속을 하면 

Choices에 생겻습니다.


해당 Choices 을 눌러 


ADD CDHOICE 를 눌러 줍니다. 

위와 같이 등록을 해주면 

데이터 베이스에 연동이 됩니다.


question.choice_set.all 은 바로 위 테이블에서 데이터를 가지고 오게 됩니다. 


polls/templates/polls/detail.html 을 해석 하면 

{{ question.question_text }} 구문을 보면, Django 는 먼저 question 객체에 대해 사전형으로 탐색합니다. 탐색에 실패하게 되면 속성값으로 탐색합니다. (이 예에서는 속성값에서 탐색이 완료됩니다만) 만약 속성 탐색에도 실패한다면 리스트의 인덱스 탐색을 시도하게 됩니다.


{% for %} 반복 구문에서 메소드 호출이 일어납니다. question.choice_set.all 은 Python 에서 question.choice_set.all() 코드로 해석되는데, 이때 반환된 Choice 객체의 반복자는 {% for %} 에서 사용하기 적당합니다.


template 에 대한 더 많은 정보는 template 지침서 를 보시면 도움이 됩니다. 



'Web > Django' 카테고리의 다른 글

django 간단한 폼 만들기  (0) 2017.08.12
dajngo Template 에서 하드코딩된 URL 을 제거  (0) 2017.08.12
django 404 에러 일으키기  (0) 2017.08.12
django view와 template 연동하기  (0) 2017.08.12
Django view 작성하기  (0) 2017.08.11
Comments