알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
Template 시스템 사용하기 본문
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 |