django local_settings 导入错误

django local_settings import error

我想导入一个 local_settings.py 文件(不在我的 VCS 系统中)以覆盖 settings.py

中的 DATABASES 设置

为此,我在 settings.py 文件的末尾添加了这些行。

try:
    from local_settings import *
except ImportError:
    print('Unable to load local_settings.py:')

当我使用 python manage.py diffsettings 时,我看到 settings.py 的数据库设置没有改变,我收到消息 Unable to load local_settings.py:

我想知道导入失败的原因。

这是我的项目文件夹架构:

my_project_folder/
   my_project_folder/
       settings.py
       urls.py
       local_settings.py
       etc...
   app1/
   app2/
   static/
   manage.py
   docker-compose.yml
   etc...

这是我local_settings.py的内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db_my_project',
        'PORT': 5432,
    }
}

这是settings.py中DATABASES设置的内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'my_project',
        'PASSWORD': 'my_password',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

在此先感谢您的帮助!

它不起作用,因为您忘记了 local_settings.py 前面的 .(相对导入)。尝试from .local_settings.py import *,同时检查当前文件夹中是否有__init__.py

关于设置,我建议您将设置存储在 settings 文件夹中。并为每个环境创建一个设置文件。创建一个包含基本设置的 base.py 文件,然后将其导入所有其他设置文件。

结构如下:

├── project_name
│   ├── project_name
│   │   ├── settings
│   │   │   ├── __init__.py
│   │   │   ├── base.py
│   │   │   ├── dev.py
│   │   │   ├── staging.py
│   │   │   └── prod.py
│   │   ├── __init__.py
│   │   ├── urls.py
│   │   └── wsgi.py
...

和一个设置文件(例如dev.pylocal.py):

try:
    from .base import *
except ImportError:
    print('Unable to import base settings file:')

# ...

尽可能使用相对导入。

关于数据库,您不应该在 base.py 中配置它们。在每个特定的设置文件中声明它们。

from rororo.settings import inject_settings

在你的 settings.py

结束时

inject_settings('settings_local', locals(), True)