2010-01-29 45 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>标签,它工作正常。

相关问题