Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask: NameError: global name 'redirect' is not defined [closed]

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 %}
like image 922
Thrynn Avatar asked Dec 08 '15 22:12

Thrynn


1 Answers

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.

like image 107
Nathaniel Ford Avatar answered Sep 29 '22 09:09

Nathaniel Ford