我有一个settings.py
文件和一个dev_settings.py
文件,我用它来覆盖一些用于开发目的的值。每次运行./manage.py
命令时,我都必须指定--settings=whatever.local_settings
。这样做每次都变得非常繁琐,我试图找到一种方法来强制manage.py每次默认加载我的dev_settings.py文件,这样我每次运行时都不必输入那个长参数命令。
我已尝试设置DJANGO_SETTINGS_MODULE
,但似乎manage.py会覆盖此选项。
是否有可能实现这一目标,或者我注定要始终指定该论点?
答案 0 :(得分:14)
manage.py
为您设置设置路径,这就是它忽略DJANGO_SETTINGS_MODULE
的原因(它基本上只是包裹django-admin.py
的脚本)。
有两种简单的方法可以解决您的问题:
设置DJANGO_SETTINGS_MODULE
并使用django-admin.py
运行所有命令而不是manage.py
。如果您使用vitualenv。
复制manage.py
并将其命名为local.py
(这是我的名称),并将所有settings
提及重命名为dev_settings
。
例如:
#!/usr/bin/env python
from django.core.management import execute_manager
import imp
try:
import settings_local
except ImportError:
import sys
sys.stderr.write("Error: Can't find the file 'settings_local.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
sys.exit(1)
if __name__ == "__main__":
execute_manager(settings_local)
您现在可以./local.py
运行所有命令。
答案 1 :(得分:2)
通常这样做的方法是让settings.py
具有环境之间常见的所有设置(例如INSTALLED_APPS等)。然后,您有类似settings_local.py
的内容,它定义了特定于上下文环境的设置。然后,您在settings_local.py
中导入settings.py
。
# settings.py
from settings_local import *
settings.py
会添加到您的源代码存储库中,但settings_local.py
却没有。 (但是,您通常会在回购邮件中添加settings_local.py.example
之类的内容。)
例如,当您第一次将应用程序移至生产环境时,您需要从repo中下载代码库。然后,您将settings_local.py.example
复制到settings_local.py
并进行必要的环境更改。
然后,您在每个环境中都有单独的settings_local.py
个文件,这一切都可以正常工作。
答案 2 :(得分:2)
您可以通过将这些行添加到.bash_profile文件来创建bash别名:
mymanage()
{
python manage.py $1 --settings=settings_debug
}
alias mng=mymanage
然后当您运行此命令时:
mng runserver
settings_debug.py文件将用于设置。
答案 3 :(得分:1)
您可以将django-admin.py与该环境变量一起使用。命令是可以互换的,只有django-admin.py不会覆盖您尝试使用的变量。
答案 4 :(得分:1)
如果设置文件对所有安装都是通用的,您只需导入它即可。
from settings_local import *
但通常settings_local会根据安装进行更改和调整,因为我的安装脚本会直接将文件复制到目标网站(不用担心什么是本地不可用),这意味着settings_local可能会被覆盖,以避免我只是将settings_local保留在父级安装目标的文件夹,并在settings.py中手动导入它,例如
local_settings_file = os.path.join(prevFolder, "settings_local.py")
if os.path.exists(local_settings_file):
execfile(local_settings_file)