27

我有一个 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'键或任何键值对应于我单击的提交按钮。那么,既然这不起作用,那么如何访问提交按钮的值或判断哪些表单已提交?

4

3 回答 3

35

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
于 2012-05-15T19:10:39.913 回答
12

要记住一件事以防止混淆。如果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
于 2013-10-07T08:22:44.357 回答
7

我有点晚了,但这是解决方案

您面临的问题

您正在尝试获取按钮名称,但获取按钮的初始值不正确。

HTML 代码

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

Python 代码/View.py

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

解决方案

如果存在,首先在 request.POST 字典中找到按钮名称,然后获取它们的值。

HTML 代码

添加按钮的名称及其值。

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

视图.py

您可以在 request.POST 字典中找到按钮名称

if request.POST['submit'] == 'add_object':
# Both ways to deal with it
if 'add_object' in request.POST:

额外的东西

我们在一个页面上有两个表单。

第一种形式有 2 个按钮,主题名称相同,但值不同fav_HTMLfav_CSS

第二种形式也有 2 个按钮,同名tutorials但值不同 Tutorials_HTMLTutorials_CSS

 <form action="" method="post">
      Form 1
      <button name="subject" type="submit" value="interview_HTML">HTML</button>
      <button name="subject" type="submit" value="interview_CSS">CSS</button>
 </form> 

<form action="" method="post">
      Form 2 
      <button name="tutorials" type="submit" value="Tutorials_HTML">HTML</button>
      <button name="tutorials" type="submit" value="Tutorials_CSS">CSS</button>
 </form> 

视图.py

我们可以处理不同的表单,检查单击了哪个按钮,然后获取它们的值并做一些事情。

if 'subject' in request.POST: # this section handle subject form (1st Form)
#now we can check which button is clicked 
# Form 1 is submitted , button value is subject now getting their value 

    if 'interview_HTML' == request.POST.get('subject'):
       pass 
       # do something with interview_HTML button is clicked
    elif 'interview_CSS' == request.POST.get('subject'):
        pass
        # do something with interview_CSS button is clicked

elif 'tutorials' in request.POST: #this section handle tutorials form (2nd form)

    #now we can check which button is clicked 
    # Form 1 is submitted , button name is tutorials now getting their value 

    if 'Tutorials_HTML' == request.POST.get('tutorials'):
        pass 
        # do something with fav_HTML button is clicked
    elif 'Tutorials_CSS' == request.POST.get('tutorials'):
        pass
        # do something with fav_CSS button is clicked
于 2019-12-13T07:14:45.590 回答