如何根据开发环境或生产环境中的im来配置我的settings.py以使用不同的STATIC_ROOT和STATIC_URL?
答案 0 :(得分:3)
有几种方法可以执行此操作,最简单的方法是导入一个以上的文件(通常为local_settings.py
)并覆盖主要设置(生产设置位于主settings.py
中,local_settings.py
中的本地更改})
代码:
try:
from local_settings import *
except ImportError:
pass
其他选项是保留几个单独的配置文件,如settings_prod.py
,settings_dev.py
等,每个配置文件都有自己的配置设置,但这是一个保持同步的噩梦。但是,将设置的部分移动到单独的文件(例如conf/db.py
,conf/app_data.py
,conf/locale.py
,conf/logging.py
(等),然后在设置文件中导入它们会有很大帮助。
通过指定-s
或--settings
选项使用这些设置,模块名称作为参数(不包含.py部分)。
我看到了第二个选项的一些扩展,根据环境变量/路径/机器名称自动选择了一组设置。所以只有一个settings.py
代码可以选择要加载的设置。这个选项很好,所以你不需要一直指定-s
。
最后但并非最不重要的是使用django-admin.py
代替manage.py
。这两个文件之间的区别在于manage.py
正在为特定项目设置DJANGO_SETTINGS_MODULE
环境变量。但是如果你有例如您可以将本地DJANGO_SETTINGS_MODULE
设置为指向正确的设置文件,然后使用django-admin.py
而无需指定配置。
项目之间的切换也应该很容易。
我确信没有更多的选择,但至少你可以看到它们是什么:)
答案 1 :(得分:0)
通常我有两个settings.py文件,local_settings.py和settings.py,local_settings.py用于设置应该是环境本地的变量。通常db,路径,调试设置都在这里。此文件永远不会进入版本控制。有一个local_settings.py.tmpl文件,其中包含需要设置的设置。
然后在settings.py中我有from local_settings import *
注意,如果你在local_settings文件中使用INSTALLED_APPS或任何基于元组的设置,则需要调整settings.py.例如,在settings.py中将INSTALLED_APPS = ()
更改为INSTALLED_APPS += ()
。