python flask包内引用

新手上路,请多包涵

1.我在练习Flask Web开发的时候,models.py无法对app进行import,from app import db,以及import db,以及from . import db ,都不行,请问是否不能这样引用

2.代码结构如下:
我想在 app里的models.py里imprt app的db,但一直不成功,当我用 from . import db时,报错是 Attempted relative import in non-package,当用 from app import db的时候,报错是cannot import name db
__init__的代码如下:
from flask import Flask,render_template
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager

bootstrap=Bootstrap()
mail=Mail()
moment=Moment()
db=SQLAlchemy()
login_manager=LoginManager

def create_app(config_name):

app=Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
from .main import main as blueprint
app.register_blueprint(blueprint)

return app

clipboard.png

阅读 6.3k
4 个回答

把models放到main文件夹下。

把构筑实例放到__init__内好像可以在包内直接 from 包 import db导入,而不用from 包.模块 import db

使用 Application Factories 创建 app,官方推荐使用这种方式导入当前 app
from flask import current_app

http://flask.pocoo.org/docs/0...

The downside is that you cannot use the application object in the blueprints at import time. You can however use it from within a request. How do you get access to the application with the config? Use current_app:

你的包名称叫app 在__init__里面你又创建了一个变量叫app,所以当前的app已经是你那个变量了,不是你的包了
会不会是这个原因导致的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题