烧瓶模型无法正确导入

时间:2018-10-29 18:18:06

标签: python flask flask-sqlalchemy

嗯,我有一个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语句有点问题,但是我不知道如何解决。有什么想法吗?

谢谢大家

1 个答案:

答案 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