【发布时间】:2021-09-28 19:23:06
【问题描述】:
我有一个网站,我提供了 2 种不同的表格。这是我的 HTML:
{% extends 'base.html' %}
{% block title %}
Home page
{% endblock %}
{% block content %}
<div class="pt-5">
<form action="data" method="POST" enctype="multipart/form-data">
<input type="file" name="file" accept=".csv, .xlsx, .xls" />
<input type="submit" name="form1" value="Submit"/>
</form>
</div>
<div class="pt-5">
<form action="data" method="POST" enctype="multipart/form-data">
<input type="file" name="file1" accept=".csv, .xlsx, .xls" />
<input type="file" name="file2" accept=".csv, .xlsx, .xls" />
<input type="submit" name="form2" value="Merge"/>
</form>
</div>
两个表单都上传文件,第一个表单只上传一个文件,而另一个表单应该合并两个文件。现在两者实际上将进入同一页面。我怎样才能区分它们?我搜索并遇到了这样的解决方案:
if request.method == "POST":
if "form1" in request.form:
print("form1")
elif "form2" in request.form:
print("form2")
但这对我不起作用,我怎么知道我的请求来自哪个表单?谢谢。
编辑
我上面提供的解决方案现在可以了,我不知道为什么它之前不起作用...
【问题讨论】:
-
我认为您必须在 html 中指定
action参数,然后将其重定向到相同的路线,但使用某种变量,您可以区分表单 -
如果您为表单创建两个发布路线会更容易,例如表单 1
<form action="/data1" method="POST" enctype="multipart/form-data">和表单 2 `` -
没有更好的方法吗?类似于我上面所做的灵魂,但没有奏效。这似乎不太有效..
-
@Epsi95 但我确实有两条不同的路线 data1 和 data2。我不能只有相同的路线并仍然实现它吗?感觉 Flask 一定做了一些事情来实现我正在寻找的东西,而无需创建很多路线。如果我在一页中有 5-6 个表格怎么办。那么我需要为每个表格创建一条新路线吗?在我看来不是那么有效..
-
这里没有什么花哨的,每当你制作表格时,在引擎盖下它只是
post将一些数据发送到特定的url,你能做的最好的就是在你的表格,在您的烧瓶中,您可以检查哪个表格来提取<input type="hidden" name="formid" value="1">之类的值并保持路线相同。然后在你的代码中你可以像request.form.get('formid') == '1')@MohammedAbdu