'How can we pass the data via POST while using boostrap nav tabs?

I have the following code in python:

@app.route("/request_exp", methods=["GET", "POST"])
@login_required
def request_exp():
    """Enter a development request"""
    if request.method == "POST":
        # Get company name from request_ext
        company = request.form.get("company")
        return redirect("/")

    else:
        # If request.method == "GET":
        company_list = db.execute("SELECT id, company FROM customers ORDER BY company")
        return render_template("request_exp.html", company_list=company_list)

Also the following template:

{% extends "layout.html" %}

{% block title %}
Request
{% endblock %}

{% block main %}
<!--Nav Tabs-->
<ul class="nav nav-tabs" id="myTab" role="tablist">
    <li class="nav-item" role="presentation">
      <button class="nav-link active" id="company-tab" data-bs-toggle="tab" data-bs-target="#company" type="button" role="tab" aria-controls="company" aria-selected="true">Company</button>
    </li>
    <li class="nav-item" role="presentation">
      <button class="nav-link" id="address-tab" data-bs-toggle="tab" data-bs-target="#address" type="button" role="tab" aria-controls="address" aria-selected="false">Address</button>
    </li>
    <li class="nav-item" role="presentation">
      <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact" type="button" role="tab" aria-controls="contact" aria-selected="false">Contact</button>
    </li>
    <li class="nav-item" role="presentation">
        <button class="nav-link" id="development-tab" data-bs-toggle="tab" data-bs-target="#development" type="button" role="tab" aria-controls="development" aria-selected="false">Development</button>
      </li>
  </ul>

<!--Nav Tab-->
  <div class="tab-content" id="myTabContent">
        <!-- Select Company from the Company Tab -->
    <div class="tab-pane fade show active" id="company" role="tabpanel" aria-labelledby="company-tab">
        <h2>Please select company from list or add new:</h2>
        <form action="/request_exp" method="POST">
            <div class="mb-3">
                <select class="form-select w-auto mx-auto" name="company">
                    <option disabled selected>Company...</option>
                    {% for row in company_list %}
                    <option value="{{  row.id  }}">{{ row.company }}</option>
                    {% endfor %}
                </select>
            </div>
            <!--Select customer from drop down list-->
            <div button class="btn btn-primary" type="submit">Select</button>
            </div>
            <!--Need to add ability to add new customer, TODO add html link to a pop up customer entry form-->
            <div>
                <p></p>
                <a class="btn btn-primary" href="#" role="button">Add New</a>
            </div>
    </div>


    <div class="tab-pane fade" id="address" role="tabpanel" aria-labelledby="address-tab">address</div>
    <div class="tab-pane fade" id="contact" role="tabpanel" aria-labelledby="contact-tab">contact</div>
    <div class="tab-pane fade" id="development" role="tabpanel" aria-labelledby="development-tab">development</div>
  </div>

{% endblock %}

I am trying to pass "company" from a select list on the first tab back to the server after clicking the submit button. Nothing happens.

I have tried removing the tabs and just doing a basic drop down list and everything works fine.

Thank you for any assistance.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source