[Django] Poll 프로젝트 1
Polls 프로젝트 1
Templates 생성
저번시간에는 기본뼈대까지 생성하였으며 투표를 하기위한 질문과 선택지를 데이터베이스에 저장해보았습니다.
이번 시간에는 데이터베이스에 있는 데이터를 활용해보도록 하겠습니다.
투표 프로젝트를 만들면서 자세하게 알아보겠습니다.
일단 터미널에서 polls폴더 안에 template 폴더를 생성합니다.
$ cd polls
$ mkdir templates
Pycharm을 다시한번 열어보겠습니다.
만들어진 template 폴더안에 index.html 파일을 생성합니다.
생성하는 이유는 차근차근 설명하도록 하겠습니다.
어제 만든 models.py 안에 저희가 Class Question 과 Choice 를 만들었죠?
오늘은 어제 만든 Class를 사용하여 만들어보도록 하겠습니다.
polls폴더안에 views.py파일을 실행시켜 하기 코드를 추가합니다.
def index(request): # 서버가 보내준 request 반드시 인자로 넘겨줘야함 !!
#로직처리 코드가 나와요!!
tmp = Question.objects.all().order_by('-pub_date')[:3]
# 객체(objects)의 모든것(all())을 불러옴 정렬 order_by() - 오름차순 [:] slicing
context = {"latest_question_list" : tmp}
return render(request, 'index.html', context) #render는 그리는 작업 / HTML을 그림
코드설명
서버와 클라이언트 사이에는 request와 response로 데이터를 주고 받습니다.
index(request)
: 서버에서 받은 request를 index 함수에 인자로 넘겨줍니다.
tmp
라는 변수를 설정하여
Question
: Question Class
objects
: 클래스 안의 객체
all()
: 전부
order_by('-pub_date')
: pub-date 기준으로 오름차순으로
[:3]
: Slicing 3개까지 변수로 할당합니다.
context
dictionary 형태를 통하여 변수 context를 선언합니다.
latest_question_list는 Key값 Question 의 모든객체는 Value 값이 됩니다.
render
: request 를 받아 함수처리를 하고 html파일에 적용하는 것을 의미합니다.
다음은 urls.py 파일을 생성해보겠습니다.
처음부터 새로 만들어도 가능하지만 mysite에서 만들어진 urls.py를 polls하위에 복사하여 사용하도록하겠습니다.
모든내용을 지우고
from django.urls import path
from . import views
app_name = "polls"
urlpatterns = [
# http://localhost:8000/polls/
path('', views.index, name='index'),
]
코드설명
from . import views 경로안에 views.py 함수를 사용합니다.
path(‘’, views.index, name=’index’), localhost:8000/polls/ 경로뒤에 ‘’ 아무것도 오지않으면 view.index 함수호출해요 name 은 경로에 대한 이름 입니다. 향후 이름을 통해서 경로를 호출하거나 함수를 사용할 수 있습니다.
다시 처음으로 돌아가서 index.html의 코드를 수정하겠습니다.
<body>
<h1>투표목록이 나와야 해요!!</h1>
{ % 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>출력할 투표목록이 존재하지 않습니다.</p>
{ % endif % }
</body>
코드설명
template code!! python도아니고 HTML 도아닌 template 안에서만 사용가능 중괄호 표현은 template code이며 HTML, Python 언어가 아니므로 주의하셔서 사용해야합니다.
{ % % }
: 로직코드이며 조건 및 반복문 등 로직을 사용해야할 경우 사용합니다.
{ { } }
: 값을 입력할 경우 사용합니다.
{ { if latest_question_list} }
views.index에서 키값으로 받은 latest_question_list 존재여부를 판단합니다.
{ { for question in latest_question_list} }
question 변수에 lastest_question_list객체를 삽입합니다.
<li><a href="/polls/{ { question.id } }">{ { question.question_text } }</a><li>
lastest_question_list 에서 전달받은 객체에서 .question_text 객체를 뽑아냅니다.
이렇게하면 하기의 초기페이지를 완성할 수 있습니다.
오늘은 첫페이지인 index까지 작성해 보았습니다.
Leave a comment