Displaying multiple flask variables from different forms at once in HTML template

564 Views Asked by At

I have 2 separate forms on a html template called queries.html, one for inputting a company name and one for inputting keywords as seen below.

 <form method="POST">  
   <p>Enter Company Name:</p>
   <p><input type="text" name="company_name"></p>
   <p><input type="submit" value="submit"></p>
 </form>

  <p> Name: {{ name }} </p>


 <form method="POST">  
    <p>Enter Keywords:</p>
    <p><input type="text" name="keywords"></p>
    <p><input type="submit" value="submit"></p>
 </form>

   <p> Keywords: {{ keywords }}</p>

I want to be able to display the form input in the paragraph tags seen below each form. Below is the relevant flask code:

    @app.route('/queries/', methods=['GET', 'POST'])
    def queries():
    if request.method == 'POST':
        if request.form['company_name']:
            name = request.form['company_name']
            return render_template('queries.html', name=name)
        elif request.form['keywords']:
            keywords = request.form['keywords']
            return render_template('queries.html', keywords=keywords)
    return render_template('queries.html')

My problems are, firstly, the company name when entered does display fine where the {{ name }} element is as it should but when inputting a keyword I get a 'bad request' error. Secondly, I did previously have both inputs working but when I would use one form, it would wipe the displayed data from the other, e.g. when inputting a keyword after having already input and displayed a company name, the keyword would appear at the {{ keyword }} element as it should but the company name would disappear. After some research I may need to use AJAX to keep the all elements displayed but not sure if i'm looking in the right direction. It seems this should be a relatively simple issue to solve, please help! Thanks in advance to any responses.

1

There are 1 best solutions below

0
On BEST ANSWER

In Place of :

request.form['company_name']
request.form['keywords']

Use this :

request.form.get("company_name")
request.form.get("keywords")

Flask throws error if there is no value in the form input. Using form.get the flask will try to get the value and will handle if there is no value.