【问题标题】:multiple forms in one page Flask一页Flask中的多个表单
【发布时间】: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 &lt;form action="/data1" method="POST" enctype="multipart/form-data"&gt; 和表单 2 ``
    ` 并以request.form.get('file1') 等身份访问文件
  • 没有更好的方法吗?类似于我上面所做的灵魂,但没有奏效。这似乎不太有效..
  • @Epsi95 但我确实有两条不同的路线 data1 和 data2。我不能只有相同的路线并仍然实现它吗?感觉 Flask 一定做了一些事情来实现我正在寻找的东西,而无需创建很多路线。如果我在一页中有 5-6 个表格怎么办。那么我需要为每个表格创建一条新路线吗?在我看来不是那么有效..
  • 这里没有什么花哨的,每当你制作表格时,在引擎盖下它只是post将一些数据发送到特定的url,你能做的最好的就是在你的表格,在您的烧瓶中,您可以检查哪个表格来提取 &lt;input type="hidden" name="formid" value="1"&gt; 之类的值并保持路线相同。然后在你的代码中你可以像request.form.get('formid') == '1')@MohammedAbdu

标签: python forms flask


【解决方案1】:

在我看来,使用不同的属性action 更容易,如下所示。

<form action="upload_1" method="post"> ... </form>

【讨论】:

  • 如果不创建不同的循环,就没有其他方法可以实现吗?
  • @MohammedAbdu 我发现'form1' in request.form 对我有用。
  • 请提供适合您的代码
  • @MohammedAbdu 好像和你的一模一样
  • 由于某种原因它现在起作用了,不知道为什么它以前不起作用......
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2017-01-06
相关资源
最近更新 更多