在同一表格中使用许多提交按钮

时间:2017-05-05 18:39:50

标签: python html flask

我无法访问框架中的所有按钮。它仅适用于直方图按钮。这是我想要在Post方法中访问它的表单。

 <form id="package_form" action="" method="post">
      <div class="panel-body">
          <input type ="submit" name="Download" value="Download">
      </div>
      <div class="panel-body">
          <input type ="submit" name="Histogram" value="Histogram">
      </div>
      <div class="panel-body">
           <input type ="submit" name="Search" value="Search">
      </div>

 </form>

这是我的python代码。

 if request.method == 'GET':
        return render_template("preview.html", link=link1)
    elif request.method == 'POST':
        if request.form['Histogram'] == 'Histogram':
            gray_img = cv2.imread(link2,cv2.IMREAD_GRAYSCALE)
            cv2.imshow('GoldenGate', gray_img)
            hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
            plt.hist(gray_img.ravel(), 256, [0, 256])
            plt.xlabel('Pixel Intensity Values')
            plt.ylabel('Frequency')
            plt.title('Histogram for gray scale picture')
            plt.show()
            return render_template("preview.html", link=link1)

        elif request.form.get['Download'] == 'Download':
            response = make_response(link2)
            response.headers["Content-Disposition"] = "attachment; filename=link.txt"
            return response
        elif request.form.get['Search'] == 'Search':
            return link1

我做错了什么?

2 个答案:

答案 0 :(得分:8)

它不会像你写的那样工作。只有您发送的提交按钮才会包含在request.form中,如果您尝试使用其他按钮之一的名称,则会收到错误。

不是给按钮指定不同的名称,而是使用相同的名称但不同的值。

<form id="package_form" action="" method="post">
      <div class="panel-body">
          <input type ="submit" name="action" value="Download">
      </div>
      <div class="panel-body">
          <input type ="submit" name="action" value="Histogram">
      </div>
      <div class="panel-body">
          <input type ="submit" name="action" value="Search">
      </div>

 </form>

然后您的Python代码可以是:

if request.form.post['action'] == 'Download':
    ...
elif request.form.post['action'] == 'Histogram':
    ...
elif request.form.post['action'] == 'Search':
    ...
else:
    ... // Report bad parameter

答案 1 :(得分:0)

尽管对不同的提交使用相同的名称可以起作用(如上一个答案中所建议),但对于i18n来说却不那么方便。

您仍然可以使用其他名称,但是您应该检查使用不同的名称:

if 'Download' in request.form:
    ...
elif 'Histogram' in request.form:
    ...
elif 'Search' in request.form:
    ...
else:
    ... // Report bad parameter