Укажите файл .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()