Flask: NameError: global name 'redirect' is not defined

22,951

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.

Share:
22,951
Thrynn
Author by

Thrynn

Updated on December 09, 2020

Comments

  • Thrynn
    Thrynn over 3 years

    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
    Thrynn over 8 years
    Thank you. I thought I had it in there.
  • mmenschig
    mmenschig over 7 years
    This just saved my butt. thanks
  • Nathaniel Ford
    Nathaniel Ford over 7 years
    @mmenschig Quite welcome!