Flask视图在单独的模块中

Vio*_*rel 8 python flask python-3.x

flaskr.py

# flaskr.py    
from flask import Flask


app = Flask(__name__)

import views


if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

views.py

# views.py
from flaskr import app
from flask import render_template, g

@app.route('/')
def show_entries():
    entries = None
    return render_template('show_entries.html', entries=entries)
Run Code Online (Sandbox Code Playgroud)

python3 flaskr.py

任何人都可以告诉我为什么这不起作用,但如果我将整个应用程序移动到一个单独的包中,它可以完美无缺.

没有错误,除了像views.py这样的404之外什么都不会被忽略.我知道Flask,我正在尝试不同的东西来理解它是如何工作的.

谢谢!

Kir*_*aLT 7

如果要将视图移动其他文件,则需要注册蓝图:

flask.py

# flaskr.py    
from flask import Flask
from .views import my_view

app = Flask(__name__)
app.register_blueprint(my_view)

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

views.py

# views.py
from flaskr import app
from flask import render_template, g

my_view = Blueprint('my_view', __name__)

@app.route('/')
def show_entries():
    entries = None
    return render_template('show_entries.html', entries=entries)
Run Code Online (Sandbox Code Playgroud)

类似的问题:

  • 你的例子中有一个循环导入,不是吗? (3认同)
  • ImportError:无法从部分初始化的模块“views”导入名称“my_view”(很可能是由于循环导入) (2认同)

Vio*_*rel 2

显然,这与app.root_path.

  • views.py中,app.root_path/path/to/project/flaskr
  • 但在flaskr.py中,app.root_path/path/to/project

所以Flask期望将views.py放入包中。