8

I'm trying to make a form that saves the form input as URL queries. However, I don't know why this is happening when I press the form's submit button. I'm sure it has something to do with redirect() or my form.

site.py

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def index():
    return render_template("about.html")

@app.route('/hobbies/')
def blog():
    return render_template("hobbies.html")

@app.route('/about/')
def about():
    return render_template("about.html")

@app.route('/projects/', methods=['GET', 'POST'])
def projects():
    return render_template("projects.html")

@app.route('/dress')
def dress():
    return render_template("dress.html")

@app.route('/dress', methods=['GET', 'POST'])
def my_form_post():
    min_bust = request.form['min_bust']
    max_bust = request.form['max_bust']
    min_waist = request.form['min_waist']
    max_waist = request.form['max_waist']
    min_length = request.form['min_length']
    max_length = request.form['max_length']
    return redirect(url_for('/dress/', 
                             min_bust=min_bust,
                             max_bust=max_bust, 
                             min_waist=min_waist, 
                             max_waist=max_waist, 
                             min_length=min_length, 
                             max_length=max_length), code=302)

@app.route('/base/')
def base():
    return render_template("base.html")

@app.errorhandler(404)
def page_not_found(e):
    return render_template("404.html"), 404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500

if __name__ == '__main__':
    app.run(debug=True)

dress.html:

{% extends "base.html" %}

{% block title %}Dress Finder{% endblock %}

{% block menu %}
<div class="menu">
    <a href="http://localhost:5000/hobbies/"><div class="button">Hobbies</div></a>
    <a href="http://localhost:5000/about/"><div class ="button"> Katie</div></a>
    <a href="http://localhost:5000/projects/"><div class="button" id="current_page">Projects</div></a>
</div>
{% endblock %}

{% block content %}
Dress Finder
<br><br><br>
Input desired Bust/Waist/Length measurements in inches and Dress Finder does the rest.
<br><br>
<form action="/dress" method="POST">
  <input type="text" name="min_bust" placeholder="Min Bust Size" class="input"> 
  to <input type="text" name="max_bust" placeholder="Max Bust Size" class="input"> 
  <br><br>
  <input type="text" name="min_waist" placeholder="Min Waist" class="input"> 
  to <input type="text" name="max_waist" placeholder="Max Waist" class="input"> 
  <br><br>
  <input type="text" name="min_length" placeholder="Min Length" class="input"> 
  to <input type="text" name="max_length" placeholder="Max Length" class="input"> 
  <br><br>
  <input type="submit" name="my-form" value="                 submit                 " class="prettyButton">
</form>
{% endblock %}
Thrynn
  • 199
  • 2
  • 2
  • 11

1 Answers1

28

You need to change this:

from flask import Flask, render_template, request

to this:

from flask import Flask, render_template, request, redirect

redirect is a function call provided by the Flask library, but you have to import it to this file for it to be available. See this for the general case.

Community
  • 1
  • 1
Nathaniel Ford
  • 20,545
  • 20
  • 91
  • 102