Jongkook

RuntimeError at /polls/1 그리고 MultiValueDictKeyError

지지하기의 선택 버튼을 누르면 다음과 같은 에러코드를 볼 수 있었습니다.
url은 http://127.0.0.1:8000/polls/1 입니다.

RuntimeError at /polls/1
You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/polls/1/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.

아래는 area.html의 form 부분 입니다.

<form action = "/polls/{{poll.id}}/" method = "post">
{% csrf_token %}
<button name="choice" value="{{candidate.id}}">선택</button>
</form>

APPEND_SLASH 문제도 위 코드의 action 부분을 보시면 아시겠지만 문제가 없는 것 같습니다.

만약 slash문제가 해결되었다고 가정하고 url을 http://127.0.0.1:8000/polls/1/로 직접 이동했을 때에는 아래와 같은 에러를 확인할 수 있었습니다.

MultiValueDictKeyError at /polls/1/
"'choice'"

에러 화면에서 아래와 같은 추가 정보도 있었습니다.

During handling of the above exception ('choice'), another exception occurred:
26 def polls(request, poll_id):
27 poll = Poll.objects.get(pk = poll_id)
28 selection = request.POST['choice']

위의 경우 28번줄에 하이라이트 표시가 있었습니다.

2 개의 답변
Jongkook

여러가지 테스트를 하다보니 갑자기 정상적으로 작동하였습니다.
원인을 못찾은 상태에서 정상으로 돌아와 버려서 당혹스럽네요 ;;;;

  • 이재희
    저도 같은 오류가 뜨는데 어떻게 하셨었나요? ― 이재희 2017.8.18 11:24
  • 이예진
    selection = request.POST.get('choice',False) 로 하니까 되네요 ― 이예진 2017.8.18 11:24
  • 이예진
    저도 같은 오류가 떠요ㅜㅜ ― 이예진 2017.8.18 11:24
류예나

url 부분에서 slash 없앴더니 돼요!

url(r'polls/(?P\d+)$', views.polls),

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.