django manage.py 设置 默认
我有一个叫做 settings.py
的文件,还有一个叫 dev_settings.py
的文件,用来在开发时覆盖一些设置。每次我运行 ./manage.py
命令的时候,都得加上 --settings=whatever.local_settings
这个参数。这样每次都要输入这个参数真的很麻烦,我想找个办法让 manage.py
默认加载我的 dev_settings.py
文件,这样我就不用每次都输入这么长的参数了。
我试过设置 DJANGO_SETTINGS_MODULE
,但是看起来 manage.py
会覆盖这个选项。
这样做有可能实现吗?还是说我注定要一直输入这个参数呢?
5 个回答
你可以通过在你的 .bash_profile 文件中添加以下几行来创建一个 bash 别名:
mymanage()
{
python manage.py $1 --settings=settings_debug
}
alias mng=mymanage
然后当你运行这个命令时:
mng runserver
settings_debug.py 文件将会被用作设置文件。
通常,这种做法是你会有一个叫做 settings.py
的文件,里面包含了所有环境之间共同的设置(比如说 INSTALLED_APPS 之类的东西)。然后,你会有一个类似 settings_local.py
的文件,专门定义当前环境特有的设置。接着,你在 settings.py
中引入 settings_local.py
。
# settings.py
from settings_local import *
settings.py
会被添加到你的源代码库中,但 settings_local.py
不会被添加。(不过,通常你会把一个像 settings_local.py.example
的文件添加到库里。)
比如说,当你第一次把应用程序迁移到生产环境时,你会从你的代码库中拉取代码。然后,你会把 settings_local.py.example
复制一份,命名为 settings_local.py
,并根据需要进行一些特定于环境的修改。
这样,你在每个环境中都有不同的 settings_local.py
文件,一切都能正常工作。
manage.py
是一个脚本,它会自动设置你的配置文件路径,所以它会忽略 DJANGO_SETTINGS_MODULE
这个环境变量(其实它就是一个包装了 django-admin.py
的脚本)。
要解决你的问题,有两种简单的方法:
设置
DJANGO_SETTINGS_MODULE
,然后使用django-admin.py
来运行所有命令,而不是使用manage.py
。如果你使用 virtualenv,这样做会更好。复制
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
来运行所有命令了。