首页 > 解决方案 > NameError:名称'app'未在Flask中定义

问题描述

FlaskWebDir
  helloapp
    __init__.py
    templates
    hello.py
  main.py

__ init __.py

from flask import Flask
from helloapp import routes

app = Flask(__name__)

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

routes.py

from flask import render_template

@app.route("/")
def hello():
    ### code
    
@app.route("/user/<username>/")
def hello_user(username):
    ### code

@app.route("/users/")
def display_users():
    ###code

main.py

from helloapp import app
$ flask run
 * Serving Flask app "main.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "/home/as/FlaskWebDir/projenv/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 967, in main
    cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 848, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 305, in __init__
    self._load_unlocked()
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 330, in _load_unlocked
    self._app = rv = self.loader()
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/home/as/FlaskWebDir/projenv/lib/python3.8/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/home/as/FlaskWebDir/main.py", line 1, in <module>
    from helloapp import app
  File "/home/as/FlaskWebDir/helloapp/__init__.py", line 2, in <module>
    from helloapp import routes
  File "/home/as/FlaskWebDir/helloapp/routes.py", line 5, in <module>
    @app.route("/")
NameError: name 'app' is not defined

标签: pythonflask

解决方案


在您的路线中,添加:

# Previous import
from helloapp import app

@app.route('/')
def hello():
    # ...

# ...

您在此处导入的app内容用于您的装饰器。


推荐阅读