如何在 Django 中访问表单提交按钮的值?
Posted
技术标签:
【中文标题】如何在 Django 中访问表单提交按钮的值?【英文标题】:How can I access the form submit button value in Django? 【发布时间】:2012-05-23 08:09:32 【问题描述】:我有一个 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'
键或任何值与我单击的提交按钮相对应的键。那么,既然这不起作用,那么如何访问提交按钮的值或判断哪些表单已提交?
【问题讨论】:
【参考方案1】:Submit
是一个 html 表单结构...您必须使用表单对象的 name 属性,如下所示...在您的模板中:
<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
【讨论】:
这取决于为特定提交按钮设置的值。如果这是一个空字符串,您的解决方案将不起作用(因为''
,一个空字符串,被评估为假)。
我用 ... 它来显示重要的是 name
而不是 value
... 现在正在修复,谢谢。
没问题。但也许更简单的方法是将request.POST.get('list')
替换为'list' in request.POST
?
是的,但是将提交按钮的value
设置为Empty String
是不合逻辑的,因为没有标签的按钮在表单中不好(:
是否有任何理由使用request.POST.get('list')
而不是request.POST['list']
?【参考方案2】:
要记住一件事以防止混淆。如果表单中只有一个按钮,则提交按钮的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
【讨论】:
【参考方案3】:我有点晚了,但这里是解决方案
您面临的问题
您正在尝试获取按钮名称,但获取按钮的初始值不正确。
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">
Views.py
可以在 request.POST 字典中找到按钮名称
if request.POST['submit'] == 'add_object': # Both ways to deal with it if 'add_object' in request.POST:
额外的东西
我们在一个页面上有两个表单。
第一个表单有 2 个名称相同的按钮 subjects 但值不同 fav_HTML 和 fav_CSS。
第二种形式也有 2 个名称相同的按钮 tutorials 但值不同 Tutorials_HTML 和 Tutorials_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>
views.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
【讨论】:
以上是关于如何在 Django 中访问表单提交按钮的值?的主要内容,如果未能解决你的问题,请参考以下文章