ํํ ๋ฆฌ์ผ 3์์๋ ๋ทฐ๋ฅผ ๋ง๋๋๋ฐ ์ค์ ์ผ๋ก ์งํํ๋ค.
polls / views.py
# ์์ ๊ฒฝ๋ก๋ก ๊ฐ์ ์๋ ๋ด์ฉ ์ถ๊ฐํ๊ธฐ
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
์ด ํ, ์ด view๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด url๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.
polls/urls.py
# ์์ ๊ฒฝ๋ก์ ์๋ ๋ด์ฉ ์ถ๊ฐ
from django.urls import path
from . import views
urlpatterns = [
# ex: /polls/
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]
polls/urls.py ์ urlpatterns๋ฅผ ํ๋ฒ ๋ณด์
๊ณผ๊ฑฐ์๋ ์ ๊ทํํ์(์ ๊ทํํ์)์ผ๋ก ๊ตฌ์ฑํ์๋ค.์์ฆ์๋ ์ ๊ทํํ์ ๋ง๊ณ import path ๋ฅผ ํ์ฌ path ๋ก ์ง์ ํด์ค๋ค.
๐๐ป ์ ๊ทํํ์์ด ์ง๊ด์ ์ด์ง ์๊ณ ๋๋ฌด ๊ด๋ฒ์ํ๊ฒ ํฌํจํ๊ณ ์์ด์ path๋ฅผ
๋ ์งํฅํ๋ ํธ !
๊ฐ ๋ทฐ๋ ๋๊ฐ์ง๋ก ๋ณด์ฌ์ง ์ ์๋ค.
polls/views.py
# ์์ ๊ฒฝ๋ก๋ก ๊ฐ์ index ๋ถ๋ถ์ ์๋ ๋ด์ฉ์ผ๋ก ์์ ํ์
from django.http import HttpResponse
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
output = ', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output)
# Leave the rest of the views (detail, results, vote) unchanged
question ๋ชจ๋ธ์ ๋ถ๋ฌ์์, index view์ ์์ฒญ์ด ๋ค์ด์์ ๋, pub_date์ ์ญ์์ผ๋ก 5๊ฐ๊น์ง๋ง ์ ๋ ฌํ ๊ฐ์ lastes_questin_list
๐คทโโ๏ธ ๊ถ๊ธ์ฆ,, > [-1:-5] ๋ณด๋ค ๋ ๋ณด๊ธฐ ์ข์์ pub_date์ ๋ง์ด๋์ค๋ฅผ ๋ถ์ธ๊ฑธ๊น?!
์ง๊ธ๊น์ง ํ์ด์ง๋ฅผ ๊พธ๋ฏธ์ง์์๊ธฐ ๋๋ฌธ์ ์์๊ฒ ๋์ค์ง ์์ ๊ฒ์ด๋ค.
์ฅ๊ณ ์์ ํ
ํ๋ฆฟ ํ๊ทธ
๋ผ๋ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์ดํดํ ์ ์๊ธฐ ๋๋ฌธ์ HTML์ ๋ฃ์์๊ฐ ์๋ค.
ํ
ํ๋ฆฟ ํ๊ทธ
๋ ํ์ด์ฌ์ HTML๋ก ๋ฐ๊ฟ์ฃผ์ด, ๋์ ์ธ ์น ์ฌ์ดํธ๋ก ๋ง๋ค์ด์ค๋ค.
ํ
ํ๋ฆฟ์ ์ถ๊ฐํด์ ๊พธ๋ฉฐ๋ณด์!!
์ฐ์ , polls app ๋๋ ํ ๋ฆฌ์ templates ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์ polls ๋๋ ํ ๋ฆฌ ๋ ์์ฑํ๊ณ , ๊ทธ ์์ index.html ํ
ํ๋ฆฟ์ ์์ฑํ์.
polls/templates/polls/index.html
# ์ ๊ฒฝ๋ก์์ ์๋ ๋ด์ฉ ์ถ๊ฐ
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
ํ ํ๋ฆฟ ์ฌ์ฉ์ ์ํด index view ์์ ํ๊ธฐ
polls/views.py
# ์ ๊ฒฝ๋ก์์ ์๋ ๋ด์ฉ์ผ๋ก index ์์ ํ๊ธฐ
from django.http import HttpResponse
from django.template import loader
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {
'latest_question_list': latest_question_list,
}
return HttpResponse(template.render(context, request))
question ์ ์ฐพ์ง ๋ชปํ๋ฉด 404ํ์ด์ง ๋์ฐ๊ฒ ํ์
๋ค์
polls/views.py
๋ก ๊ฐ์. ์๋ ๋ด์ฉ์ผ๋ก ์์ ํ๊ธฐ
from django.shortcuts import get_object_or_404, render
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})
get_object_or_404 ๋ http404์ ๊ด์ฉ๊ตฌ์ด๋ค.
์์ธ ๋ด์ฉ์ ํ
ํ๋ฆฟ์ผ๋ก ์ ํด์ฃผ์
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.choice_set.all ์ ํ์ด์ฌ ์ฝ๋์ question.choice_set.all() ํจ์์ ๋์ผํ๋ค.
ํด๋น Quetion ๋ชจ๋ธ์ foreign key ๋ก ๊ฐ๋ choice ๋ชจ๋ธ์ for๋ฌธ์ผ๋ก ์ธ ์ ์๊ฒ ๋ฐํํ๋ค.
๐คทโโ๏ธ foreign key
ํ๋์ ํ๋ก์ ํธ ์์ ์ฌ๋ฌ๊ฐ์ ์ฑ์ด ์กด์ฌํ ๊ฒ์ด๋ค. ์ฌ๋ฌ๊ฐ์ ๊ฐ๊ฐ ์ฑ์ detail.html ์ด ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ด๋ ์ฑ์ ์๋ detail.html ์ธ์ง ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด app_name์ด๋ค.
polls / urls.py ๋ก ๊ฐ๋ณด์
์ค๊ฐ์ app_name ์ ๋ฃ์ด์ฃผ์ !
๊ทธ๋ฆฌ๊ณ poll / templates / polls / index.html ์์๋ ์ฑ ๋ค์์ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๋ค.