학습주제
상세(detail) 페이지 만들기
학습내용
question 하나하나를 자세하게 표현하는 방법을 알아본다.


하나의 질문을 누르면, 상세한 내용이 나온다. 그리고 뒤에 주소가 바뀌는 것을 확인할 수 있다.

여기 나온 숫자가 question의 아이디라고 보면 된다. id를 입력받아서 해당 question 을 자세히 보여주는 index를 마든다.

숫자가 들어온 경우에, views에 detail로 연결되도록 url을 만들어 줌.
path('<int:question_id>/', views.detail, name='detail')
int형이 들어올 텐데, 이를 question_id라고 정의한다.
views.py로 넘어가서

디테일 메소드로 주어지게 된다.
간단하게 HttpResponse로 입력받은 값이 잘 출력되는지 확인한다. 이때 출력값은 입력받은 id값이다.
polls/숫자/ 형태로 받았을 때 이 숫자가 곧 question_id 값이기 때문에 브라우저에서
polls/1000을 입력해본다.

잘 뜨는 것을 확인할 수 있다.

이제 입력받은 id로 question 을 찾아서 그 내용을 표시하는 작업을 해보려 한다.
def detail(request, question_id):
question = Question.objects.get(pk=question_id)
주어진 숫자로 id를 갖고있는 question을 찾아서 question에 넣어준다. 이를 그려내려면 템플릿이 있어야 한다. 그 전에 retrun render()을 해준다.
def detail(request, question_id):
question = Question.objects.get(pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
context 부분은 딕셔너리 형태로 집어넣어야 하는데, 바로 dict 형식으로 집어 넣는다.
vs code를 저장하고 페이지를 새로고침 해주면 다음과 같은 오류가 뜬다.

Question matching query does not exist

1번을 가져와 보도록 한다.

질문의 내용뿐만 아니라, 연관된 choice들도 표시해보도록 한다.
여러개이기 때문에 반복문을 사용하기로 한다.

주의할 점으로 이 반복문 안에서 question.choice_set.all 로 all 뒤에 ()를 붙히지 않는다.
템플릿 규칙이다.

choice 목록이 잘 표시되었다.

'<int:question_id>/' 자료형을 입력하고 : 붙인 뒤에 그 자료형을 받을 이름을 적어준다.