Harrison Harrison - 3 months ago 13
Python Question

Flask: NameError: 'app' is not defined?

My Flask application has been running fine for the last 24 hours, however I just took it offline to work on it and i'm trying to start it up again and i'm getting this error:

Traceback (most recent call last):
File "runserver.py", line 1, in <module>
from app import app
File "/home/MY NAME/APP FOLDER NAME/app.py", line 15, in <module>
from Views import *
File "/home/MY NAME/APP FOLDER NAME/Views.py", line 1, in <module>
@app.route('/contact', methods=('GET', 'POST'))
NameError: name 'app' is not defined


I am running the application currently by calling
python runserver.py


runserver.py:

from app import app

app.run(threaded = True, debug=True, host='0.0.0.0')


Views.py: contains all of my routes, I won't post them all, as the error is coming from the first time
app
is mentioned in this file.

@app.route('/contact', methods=('GET', 'POST'))
def contact():
form = ContactForm()

if request.method == 'POST':
msg = Message("CENSORED,
sender='CENSORED',
recipients=['CENSORED'])
msg.body = """
From: %s <%s>,
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return "><p><br>Successfully sent message!</p></body>"
elif request.method == 'GET':
return render_template('contact.html', form=form)


app.py: Here is the top of my app.py file, where I define
app = Flask(__name__)
as well as import my statements.

from flask import Flask, request, render_template, redirect, url_for, send_file
from geopy.geocoders import Bing
from geopy.exc import GeocoderTimedOut
import re
import urllib
from bs4 import BeautifulSoup
from openpyxl import load_workbook
from openpyxl.styles import Style, Font
import os
import pandas as pd
import numpy as np
import datetime
from Helper_File import *
from Lists import *
from Views import *
from flask_mail import Mail, Message
from forms import ContactForm

global today

geolocator = Bing('Censored')

app = Flask(__name__)


EDIT: I have made the changes suggested in the answer below, but am getting this when I access the page:


Not Found

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.


Here is my file structure:

DHLSoftware.com
|-static
|-style.css
|-templates
|- seperate html file for each page template
|-app.py
|-forms.py
|-helper_file.py
|-Lists.py
|-runserver.py
|-Views.py

Answer

In app.py you should remove the from Views import *. Instead in your Views.py you need to have from app import app

That will bring app into the views namespace and I believe that should work for you.