2010-01-29 2 views
15

양식이 제출 된보기에 두 개의 다른 제출 단추가있는 장고 양식이 있습니다. 제출 단추를 눌렀다가 알 수 있어야합니다. 그에 따라 다른 행동.Django request.POST에 양식을 제출 한 버튼의 이름이 포함되어 있지 않습니다.

내가 제출 한 버튼의 이름이나 ID는 request.POST 사전의 어딘가에 있어야하지만 거기에는 없습니다! 내가 찾고해야

... 
if 'sendPaperButton' in request.POST: 
    return applicants_confirmSend(request, paperID) 
else: 
    return applicants_home(request) 

sendPaperButton가 request.POST에 결코 없으며, 어느 쪽도 다른 하나입니다 뷰에서

<form id="editPaperForm" action="{{paper.editURL}}" method="POST"> 
    <input type="submit" name="savePaperButton" id="savePaperButton" value="Save and Send Later"/> 
    <input type="submit" name="sendPaperButton" id="sendPaperButton" value="Save and send"/> 

    ... 

</form> 

:

은 내 양식의 조각입니다 다른 곳?

... 내가 가진 유일한 아이디어는 숨겨진 필드를 추가하고 양식을 전송하기 전에 자바 스크립트를 통해 그것을 수정하는 것입니다하지만 데이터가 어딘가에있을 것을 확신하기 때문에 그 종류의 중복 보인다

감사합니다 !

+1

찰스 또는 피 들러와 같은 http 디버거를 통해 브라우저가 보내는 것을 살펴 보셨습니까? –

+0

아니요, 저는 브라우저가 무엇을 보내고 있는지 궁금해합니다. 파이어 폭스 3.5를 사용하고 Chrome 4와 IE6을 사용해 보았지만 다른 브라우저를 사용해 보았습니다. 크롬이 나오고 IE6에서 버튼 ID와 값을 보냈습니다. 파이어 폭스가 ... 자바 추가 값으로 숨겨진 입력을 추측하는 것이 유일한 방법일까요? –

+0

체크 박스 또는 기타 적절한 양식 요소를 사용하지 않는 이유는 무엇입니까? –

답변

28

"button"또는 양식의 "input type = submit"필드에 이름 및 값 매개 변수를 추가하는 것을 잊지 마십시오. 나는 한 번 같은 문제를 겪었고 그것은 나를 미치게 만들었다.

요약하면 request.POST에는 dict가 포함되어 있으므로 키와 값이 필요합니다. 키는 버튼의 name 매개 변수에 해당하고 dict의 값은 버튼의 값에 해당합니다.

<button type="submit" value="preview">Preview</button> 

<button type="submit" value="preview" name="preview">Preview</button> 

값 "미리보기"와 키 "미리보기"를해야합니다 반면

이 request.POST에 반영되지 않습니다 가합니다 (POST 사전에 대한 키!가 없습니다).

+0

이것은 정확히 내가 잊어 버린 것입니다. 힌트를 가져 주셔서 감사합니다! – Patrick

+0

최신 버전의 Firefox에서 문제없이 작동하지만 Google 크롬의 최신 버전에 문제가 있습니다. – Pat

+0

이렇게하면 양식 필드에 고유 한 ID와 이름이없고 POST에 데이터가없는 것과 비슷한 문제가 수정되었습니다! 나를 미치게했다! 감사! – jozzas

0

어떤 이유로 Chrome에서 <input/> 태그를 사용하는 두 개의 버튼이있을 때 실제로 입력으로 클릭하지 않은 버튼을 처리합니다. 그런 식으로, 내가 'sendPaperButton' in request.POST 같은 것을 테스트했을 때, 그것은 내가 원했던 것과 반대가 될 것입니다.

태그를 <button></button> 개의 태그로 변경했는데 정상적으로 작동했습니다.