본문 바로가기

레퍼런스/장고 튜토리얼

장고(Django) 더 많은 뷰 작성하기.

이제 polls/views.py에 더 많은 뷰를 더해보겠습니다. 이 뷰들은 인자를 받기 때문에 조금씩은 다릅니다.

 

# 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)

 

polls.url 모듈을 path() 호출에 더함으로써 새로운 뷰들을 묶어줍니다:

 

# 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/34/"를 확인하세요. detail() 메소드를 실행하고 URL에서 어떤 ID가 들어왔는지 보여줄 겁니다. "/polls/34/results/" 와 "/polls/34/vote"도 확인해보세요. 결과 페이지와 투표 페이지의 플레이스홀더(placeholder)를 보여줄 겁니다.

 

"/polls/34" 의 결과

 

 

"/polls/34/results/"의 결과

 

 

"/polls/34/vote/"의 결과

 

누군가가 여러분의 웹사이트에 request를 요청하면 - "/polls/34/", 장고는 chem.urls 파이썬 모듈을 가져옵니다. 저희가 이곳을 가리키게 만들었던 ROOT_URLCONF 설정 덕분입니다. urlpatterns 변수 이름을 찾아서 패턴을 순서대로 찾아나갑니다. 'polls/'에 맞는 부분을 찾으면 맞는 텍스트("polls/")를 찢어내고 남는 텍스트("34/")를 URL 설정에 있는 'polls.urls'에 보내서 처리합니다. '<int:question_id>'에 일치하면 다음과 같은 detail() 뷰를 호출해서 리턴합니다:

 

detail(request=<HttpRequest object>, question_id=34)

 

question_id=34 부분은 <int:question_id>에서 온 것입니다. 꺾쇠 괄호는 URL의 부분을 잡아서 뷰 함수의 키워드 인자에 보냅니다. :question_id> 부분은 맞는 패턴을 인식하기 위한 문자열입니다. <int: 부분은 이 부분의 URL 경로가 어떤 패턴에 일치하게 변화해야하는지 결정합니다.

 

.html같은 URL 찌꺼기를 추가할 필요가 없습니다. 원한다면 해도 됩니다. 아래와 같이요:

 

path('polls/latest.html', view.index),