在 Django 中使用 settings.py 以外的设置文件

问题描述 投票:0回答:6

我想在 django 中使用不同的设置文件——特别是 settings_prod——但是每当我尝试使用

--settings=settings_prod
进行同步数据库时,它就会抱怨:

python2.6 manage.py syncdb  --settings=settings_prod
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)

我也尝试过将环境变量

DJANGO_SETTINGS_MODULE=settings_prod
设置为无止境。

编辑:我还在我的 wsgi 文件中设置了环境变量,也没有结束:

import os
import sys

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings_prod'
application = WSGIHandler()

建议?

django
6个回答
27
投票

尝试创建一个

settings
模块。

  1. 在与
    settings
    相同的目录中创建一个
    manage.py
    文件夹。
  2. 将不同的设置文件放入该文件夹中(例如
    base.py
    prod.py
    )。
  3. 制作

    __init__.py
    并导入您想要用作默认设置的任何设置。例如,您的
    __init__.py
    文件可能如下所示:

    from base import *
    
  4. 运行您的项目并覆盖设置:

    $ python2.6 manage.py syncdb --settings=settings.prod
    

14
投票

我确实知道,无论您对

manage.py
做什么,您都会收到该错误,因为
manage.py
会相对导入
settings
:

try:
    import settings # Assumed to be in the same directory.

http://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-option---settings

注意这个选项是不必要的 在manage.py中,因为它使用 当前项目中的settings.py 默认情况下。

你应该尝试

django-admin.py syncdb --settings=mysettings
而不是


4
投票

这对我有用:

DJANGO_SETTINGS_MODULE=config.settings.abc python manage.py migrate

1
投票

这会对你有帮助:

  • 使用原始的settings.py 文件创建另一个文件“setting_prod.py”。

  • 在setting_prod.py 文件中写下您需要运行的设置。

  • 然后在settings.py文件中导入setting_prod.py文件。

对于前。 设置.py:

VARIABLE = 1

import setting_prod

setting_prod.py

VARIABLE = 2

在settings.py文件中导入setting_prod.py文件后,VARIABLE将从“1”设置为新值“2”。


0
投票

我们可以使用此方法来设置不同的设置文件,例如,我为单元测试使用不同的设置文件(settings_unit_test.py)。另外,我还有针对不同基础设施环境的其他设置文件 settings_dev.py、settings_test.py 和 settings_prod.py。

windows环境下(linux下也可以)

set DJANGO_SETTINGS_MODULE=settings_unit_test
set PYTHONPATH=<path_of_your_directory_where_this_file_'settings_unit_test.py'_is_kept>

0
投票

manage.py
内,你会看到这一行:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings')

其中

projectname.settings
指的是 Django 应用程序中的位置
projectname/settings.py

如果您希望设置文件指向

projectname/settings/prod.py
,则将此行更改为:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'projectname.settings.prod')
© www.soinside.com 2019 - 2024. All rights reserved.