2012-05-15 74 views
11

我有一个Django项目,在一个页面上有多个表单(在不同的标签),可以提交具有不同的效果。在所有情况下,我都希望用户重定向到同一页面,因此我使用我的视图提交表单并重定向到原始页面的模式。在至少一种情况下,两个表单之间的唯一区别是提交按钮的值。如何访问Django中的表单提交按钮值?

我认为我的代码(这是第一次我的视图函数访问request.POST):

if request.POST['submit']=='Add': 
    #code to deal with the "Add" form 

和在模板中,第一形式具有提交按钮等

<input type="submit" value="Add"> 

我想这会工作,但是当我提交表单,我得到在该行的错误观点从上面:

重点“提交”不<QueryDict: {u'clientyear': [u'2012'], u'csrfmiddlewaretoken': [u'be1f2f051f09f6ab0375fdf76cf6a4d7'], u'ben': [u'123405']}>

显然发现了,这不具有'submit'键或任意键与对应的提交按钮,我点击的价值。所以,由于这不起作用,如何访问提交按钮的值或者告诉哪些表单已经提交?

回答

22

Submit是HTML表单结构......必须按如下方式使用表单对象的名称属性...在你的模板:

<form> 
... 
<input type="submit" name="list" value="List Objects" /> 
</form> 
<form> 
... 
<input type="submit" name="do-something-else" value="Do Something Else" /> 
</form> 

在你看来:

if 'list' in request.POST: 
    # do some listing... 
elif 'do-something-else' in request.POST: 
    # do something else 
+1

这取决于什么是特定设置的值提交按钮。如果这是一个空字符串,你的解决方案将不起作用(因为''''是一个空字符串,被评估为false)。 – Tadeck

+0

我使用* ... *它显示重要的东西是'名称'不'价值'...现在修复,谢谢。 – FallenAngel

+0

没问题。但也许更简单的方法是将request.POST.get('list')'替换为request.POST'中的'list'? – Tadeck

5

一要记住,以防止混淆。如果表单中只有一个按钮,则提交按钮的name将不会显示。

#template.html 
<form action="..." method="post"> 
<input type="submit" name = "first_button" value="Add"> 
</form> 

#view.py 
... 
'first_button' in request.POST #False 

#template.html 
<form action="..." method="post"> 
<input type="submit" name = "first_button" value="Add"> 
<input type="submit" name = "second_button" value="Remove"> 
</form> 

#view.py 
... 
'first_button' in request.POST #True if you clicked on that button