Я работаю над приложением для колб со следующей структурой:
.
├── app
│ ├── __init__.py
│ ├── forms
│ │ └── login.py
│ ├── models
│ │ ├── __init__.py
│ │ └── user.py
│ ├── templates
│ │ ├── base.html
│ │ ├── home.html
│ │ └── login.html
│ └── views
│ ├── __init__.py
│ └── login.py
in app/__init__.py
Я создаю экземпляр расширения LoginManager:
from flask import Flask
from config import app_config
from flask_login import LoginManager
def create_app(config_mode='development'):
"""Wrapping app creation in factory according to specified config."""
app = Flask(__name__, template_folder='templates')
...
# register login manager extension
login = LoginManager(app)
return app
Теперь мне нужно импортировать login
в app/models/user.py
, чтобы обеспечить реализацию user_loader
:
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from . import db
from .. import login
class User(UserMixin, db.Model):
"""User model."""
...
@login.user_loader
def load_user(id):
return User.query.get(int(id))
Однако любая попытка сделать это терпит неудачу с:
from .. import login
ImportError: cannot import name 'login'
У меня вопрос: есть ли способ импортировать из файла родительских каталогов __init__.py
или я здесь совершаю какую-то другую ошибку?
Я попробовал несколько различных комбинаций абсолютного и относительного импорта, но все они дали один и тот же результат, и интенсивно искал в SO и Google, но не нашел прямого ответа на мой вопрос. Я хотел бы сохранить модуль user.py
в текущем каталоге, так как структура каталога удобна и лаконична.
Заранее спасибо
редактировать: уточненное место импорта