2015-12-02 74 views
2

我想导入local_settings.py文件(这是不是在我的VCS系统),用于覆盖从settings.pyDjango的LOCAL_SETTINGS导入错误

数据库设置,为此我加入这些线路在最后我的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 = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'mydb', 
     'USER': 'my_project', 
     'PASSWORD': 'my_password', 
     'HOST': '127.0.0.1', 
     'PORT': '5432', 
    } 
} 

在此先感谢您的帮助!

回答

1

它不起作用,因为您忘记了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 
... 

并设置文件(E.gdev.pylocal.py):

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

# ... 

使用总是相对的进口时,它的可能。

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

+0

这是完美的作品!谢谢你的帮助! –

+0

你的欢迎:) –