title: How can I keep field values in a form after submit?
body: <p>After submitting a form it appears that the field values are set back to nothing.  I am doing some form validation; if the form is invalid I am having it display an error message from a list of errors but I wish for the field values to stay.  Is there a way to do this?</p>
  
  <p>This is my view that validates the form:</p>
  
  <pre><code>@app.route('/booking', methods=['GET', 'POST'])
  def booking():
      errors = [] 
      if request.method == 'GET':     
          return render_template('booking.html', errors=errors)
      else:
          # grab values from form fields and store them in objects
          start_date = request.form['start_date']
          end_date = request.form['end_date']
          name = request.form['name'].strip()
          email = request.form['email'].strip()       
  
          # check if all fields are non-empty and raise an error if not
          if not start_date or not end_date or not name or not email:
              errors.append('Please enter all the fields.')
          else:
              # converts dates to Unix time-stamp for easier validation/calculations
              start_timestamp = dt.strptime(start_date, "%d/%m/%Y")
              end_timestamp = dt.strptime(end_date, "%d/%m/%Y")
  
              # checks to see if dates are valid          
              if start_timestamp &gt; end_timestamp or end_timestamp &lt; start_timestamp:              
                  errors.append('Please enter a valid date range')
              else:
                  #checks to see if booking has already been taken
                  bookings = read_file('app/static/bookings.csv')     
                  for i in bookings:
                      s_date = dt.strptime(i[0], "%d/%m/%Y")
                      e_date = dt.strptime(i[1], "%d/%m/%Y")
                      if s_date &lt;= start_timestamp &lt;= e_date:
                          errors.append('Booking has already been taken, please select another date')
                          break
  
              # checks to see if email address is valid using regex
              if not valid_email_address(email):
                  errors.append('Please enter a valid email address')         
  
              #if no errors have occured then write booking to file
              if not errors:
                  new_booking = [start_date, end_date, name, email]
                  bookings.append(new_booking)
                  write_file(bookings, 'app/static/bookings.csv')
                  return render_template('booking.html')
      return render_template('booking.html', errors=errors)
  </code></pre>
  
  <p>This is the template for the form:</p>
  
  
  
  <pre><code>&lt;div id="main-wrapper"&gt;
      &lt;div id="main"&gt;     
          &lt;div id="info"&gt;
              {% if errors %}
              {% for error in errors %}
              &lt;div&gt;&lt;p&gt;{{ error }}&lt;/p&gt;&lt;/div&gt;
              {% endfor %}
              {% endif %}
              &lt;form action = "booking" method="post"&gt;
              &lt;input id="start_date" type="text" name="start_date"&gt;
              &lt;input id="end_date" type="text" name="end_date"&gt;
              &lt;input type="text" name="name" /&gt;
              &lt;input type="text" name="email" /&gt;
  
              &lt;input type="submit" value="Submit"&gt;
          &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;
  </code></pre>