2010-01-29 73 views
15

我有一個Django表單,有兩個不同的提交按鈕,在提交表單的視圖中,我需要知道提交按鈕是按下的,相應的不同行爲。Django request.POST不包含提交表單的按鈕名稱

從我讀過的提交按鈕的名稱或ID應該在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> 

在視圖:

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

sendPaperButton是從未在request.POST,也不是另外一個,我應該看別的地方?

我唯一的想法就是添加一個隱藏字段和發送表單之前通過javascript修改,但因爲我敢肯定,數據應該存在的地方,似乎有點多餘...

謝謝!

+1

您是否嘗試過查看您的瀏覽器通過http調試器(如Charles或Fiddler)發送的內容? – 2010-01-29 04:15:25

+0

不,我沒有,但你讓我好奇瀏覽器發送什麼,所以我嘗試了不同的瀏覽器(使用Firefox 3.5,試過Chrome 4和IE6),結果發現Chrome和IE6確實發送了按鈕ID和值, Firefox不會......用Javascript添加值猜測隱藏的輸入是我唯一的選擇? – 2010-01-29 04:33:21

+0

爲什麼不使用複選框或其他適當的表單元素? – 2010-01-29 05:12:01

回答

28

不要忘記將名稱和值參數添加到表單的「按鈕」或「輸入類型=提交」字段中。我曾經有過同樣的問題,這讓我瘋狂。

總之,由於request.POST包含一個字典,你需要一個鍵和一個值。該鍵對應於你的按鈕的名稱參數,以及字典對按鈕值的值。

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

不會request.POST反映(有沒有關鍵的POST字典!),而

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

將有一個關鍵的「預覽」與價值「預覽」。

+0

這正是我忘記的東西。感謝提示! – Patrick 2010-07-09 17:23:50

+0

在最新版本的谷歌瀏覽器中遇到麻煩,儘管它可以與最新版本的Firefox一起使用。 – Pat 2012-09-18 03:38:49

+0

這固定了我有一個類似的問題,其中表單域具有唯一的ID,沒有'name',並且POST不包含任何數據!正在讓我瘋狂!謝謝! – jozzas 2012-10-28 05:06:09

0

出於某種原因,在Chrome中,當我有兩個使用<input/>標記的按鈕時,它實際上會將我沒有點擊作爲輸入的按鈕。這樣,當我測試像'sendPaperButton' in request.POST這樣的東西時,它會返回與我想要的相反的東西。

我將這些更改爲<button></button>標籤,它工作正常。

相關問題