假设您有一个包含多个提交的表单:
<form method="POST" action="/etc">
<input name="foo" type="submit" value="Foo!">
<input name="bar" type="submit" value="Bar!">
</form>
检查在PHP中按下了哪个提交按钮非常简单:
if (isset($_POST['foo'])) { return 'foo' }
if (isset($_POST['bar'])) { return 'bar' }
什么是Python.Bottle等价物?
我试过了:
if (request.POST.get('foo')):
return 'foo'
if (request.POST.get('bar')):
return 'bar'
但是返回KeyError,意味着'foo'和'bar'不在POST dict中。
我还尝试在表单中添加一个测试字段,并在提交表单时返回该字段中的值,并且完美无缺,因此表单正在发布。
有一点可能很重要:表单中的提交按钮是动态生成的。
编辑:发现可能的问题。我正在使用jQuery发布和序列化表单数据,但显然jQuery的序列化忽略了输出中的提交按钮,这肯定会导致我所看到的。目前正致力于解决方法,但仍然感谢任何帮助。答案 0 :(得分:2)
您可以尝试在表单中添加enctype="multipart/form-data"
吗?
<form action="/etc" method="post" enctype="multipart/form-data">
<input name="foo" type="submit" value="Foo!">
<input name="bar" type="submit" value="Bar!">
</form>
BaseRequest.forms
从
url-encoded
或multipart/form-data
解析的表单值 编码POST
或PUT
请求正文。结果重新调整为FormsDict
。所有键和值都是字符串。存储文件上传 分别在files
。
和
BaseRequest.POST
forms
和files
的值合并为一个FormsDict
。 值可以是字符串(表单值)或实例cgi.FieldStorage
(文件上传)。
答案 1 :(得分:2)
问题是jQuery的序列化函数忽略了提交按钮。
我通过在所有相关的提交按钮中添加一个类(submitButton
)并在表单中添加一个隐藏的输入(theHiddenInput
),然后添加以下内容来解决这个问题处理程序:
$('.submitButton').click(function() {
this.form.theHiddenInput.value = this.name;
});
以下代码相当于我以前的代码:
if (request.POST.get('theHiddenInput') == 'foo'):
return 'foo'
if (request.POST.get('theHiddenInput') == 'bar'):
return 'bar'
也许这将有助于将来。