嗯,我有一个Flask SQL-Alchemy项目。到目前为止,这是我的结构:
app
|__ module1
| |__ models.py
| |__ views.py
|__ module2
| |__ models.py
| |__ views.py
|__ app.py
|__ config.py
在每个models.py
上,我都有这个:
from app import db
#classes
在每个views.py
上,我都有这个:
from module1.models import *
from module2.models import *
from app import app
from flask import session, request, render_template, url_for, redirect
import datetime
#views
这是我的app.py
文件:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
db = SQLAlchemy(app)
from module1.views import *
from module2.views import *
import config
def init():
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port, debug=True)
if __name__ == "__main__":
init()
当我在module1.views上,并从module2.models调用模型时,效果很好。但是,当从module1.views上的module1.models调用模型时,出现了NameError:
module1.models, module1.views --> Works
module1.models, module2.views --> Works
module2.models, module1.views --> Name Error
module2.models, module2.views --> Works
此外,导入进展顺利,对此没有任何错误。当我给全班打电话时,它失败了。我认为import语句有点问题,但是我不知道如何解决。有什么想法吗?
谢谢大家
答案 0 :(得分:0)
每个子目录https://docs.python.org/3/tutorial/modules.html#packages中可能都需要一个__init__.py文件。
此答案中还有更多信息可能对您有用What is __init__.py for?
基于您在视图之间共享模型功能的方式,使用像
这样的目录结构可能更有意义.
├── models
│ ├── models1.py
│ └── models2.py
└── views
├── view1.py
└── view2.py