Укажите файл .env в Django в командной строке или vscode launch.json

На данный момент у меня есть проект Django, запущенный в VS Code. В настоящее время он использует один файл .env для подключения к базе данных SQL Server.

environments/.env

DATABASE_URL=mssql://USER_NAME:PASSWORD@SERVER_NAME/DATABASE_NAME
<
import environ


env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)


BASE_DIR = Path(__file__).resolve().parent.parent
ENVIRONMENT_DIR = os.path.join(BASE_DIR, "environments")

environ.Env.read_env(os.path.join(ENVIRONMENT_DIR, '.env'))
env = environ.Env()

...

DATABASES = {
    "default": env.db_url(),
    }
}
settings.py

__.vscode/launch.json

Это выполняется в VS Code со следующей конфигурацией запуска:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "runserver",
            ],
            "django": true
        },
    ]
}

Вопрос

Вопрос в том, можно ли иметь множество различных сред для подключения, используя различные файлы нескольких сред? Что-то вроде:

  • dev.env
  • test.env
  • prod.env

Затем заставьте VS Code запустить определенный .env из launch.json.

Источники:

https://django-environ.readthedocs.io/
https://django-environ.readthedocs.io/en/latest/tips.html#multiple-env-files
https://djangostars.com/blog/configuring-django-settings-best-practices/

Похоже, что вы можете указать переменные среды в соответствии с этим вопросом - https://github.com/microsoft/vscode-python/issues/6986.

Таким образом, требуются следующие изменения:

.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "runserver",
            ],
            "env": {
                "ENVIRONMENT_FILE": "dev.env"
            },
            "django": true
        },
    ]
}

settings.py

BASE_DIR = Path(__file__).resolve().parent.parent
ENVIRONMENT_DIR = os.path.join(BASE_DIR, "environments")
ENVIRONMENT_FILE = os.environ.get("ENVIRONMENT_FILE", default=".env")
ENVIRONMENT_FILE_FULL_PATH = os.path.join(ENVIRONMENT_DIR, ENVIRONMENT_FILE)

environ.Env.read_env(ENVIRONMENT_FILE_FULL_PATH)
env = environ.Env()
Вернуться на верх