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.py
或local.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)
我想导入一个 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.py
或local.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)