Django - разделение настроек по окружению. Не удается найти переменную из базовых настроек
Я разделил свою среду django в соответствии с этим постом.
В settings/base.py
я BASE_DIR
указал:
BASE_DIR = Path(__file__).resolve().parent.parent.parent
В settings/__init__.py
у меня есть:
from .base import *
env = os.environ['ENV']
...
if env == 'test':
from .test import *
...
В settings/test.py
у меня есть DATA_VOLUME_BASE_DIR = BASE_DIR / 'scanned_images'
.
Я ожидаю, что Django загружает модуль настроек, импортирует settings/base.py
, проверяет окружение ('test'), импортирует settings/test.py
(что работает) и переменная доступна (что нет). Мой стектрейс:
sid_test_web | Traceback (most recent call last):
sid_test_web | File "/code/manage.py", line 22, in <module>
sid_test_web | main()
sid_test_web | File "/code/manage.py", line 18, in main
sid_test_web | execute_from_command_line(sys.argv)
sid_test_web | File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_
sid_test_web | utility.execute()
sid_test_web | File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 363, in execute
sid_test_web | settings.INSTALLED_APPS
sid_test_web | File "/usr/local/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in __getattr__
sid_test_web | self._setup(name)
sid_test_web | File "/usr/local/lib/python3.10/site-packages/django/conf/__init__.py", line 69, in _setup
sid_test_web | self._wrapped = Settings(settings_module)
sid_test_web | File "/usr/local/lib/python3.10/site-packages/django/conf/__init__.py", line 170, in __init__
sid_test_web | mod = importlib.import_module(self.SETTINGS_MODULE)
sid_test_web | File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
sid_test_web | return _bootstrap._gcd_import(name[level:], package, level)
sid_test_web | File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
sid_test_web | File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
sid_test_web | File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
sid_test_web | File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
sid_test_web | File "<frozen importlib._bootstrap_external>", line 883, in exec_module
sid_test_web | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
sid_test_web | File "/code/my_project/settings/__init__.py", line 9, in <module>
sid_test_web | from .test import *
sid_test_web | File "/code/my_project/settings/test.py", line 39, in <module>
sid_test_web | DATA_VOLUME_BASE_DIR = BASE_DIR / 'scanned_images'
sid_test_web | NameError: name 'BASE_DIR' is not defined
Как сделать переменную BASE_DIR
доступной?
Вы должны импортировать настройки .base
в тестовые настройки, чтобы они стали доступны в test.py
from .base import *
# ... your other test settings
Второе - выбрать, какие настройки вам нравятся в __init__.py
.
env = os.environ['ENV']
if env == 'test':
from .test import *
else:
from .base import *