Django settings.py:分离本地与全局配置
我在想,能不能把Django中的“本地”配置(比如静态文件的本地路径、必须是绝对路径的模板内容、本地数据库信息等等)和“全局”配置(比如网址、中间件类、已安装的应用等)分开,这样几个人可以在同一个项目上用Git或SVN合作,而不需要每次提交代码时都重写本地设置!
谢谢!
2 个回答
0
你可以把配置分成不同的文件。因为这些配置是用Python写的,所以你可以通过 import local_settings
来导入其他配置文件里的设置。你甚至可以把这个导入放在一个条件语句里,这样就可以根据不同的情况来导入本地的设置。
可以看看这个文档了解更多信息: http://docs.djangoproject.com/en/dev/topics/settings/
14
当然可以。settings.py 文件就是一个普通的 Python 文件,所以你可以在里面做任何事情——包括动态设置一些东西,或者导入其他文件来覆盖原来的设置。
这里有两种方法。第一种是不写死任何路径,而是动态计算这些路径。
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = [
os.path.join(PROJECT_ROOT, "templates"),
]
比如,Python 有个很神奇的关键词 __file__
,它可以告诉你当前文件的路径。
第二种方法是创建一个 local_settings.py
文件,把它放在 SVN 之外,然后在主 settings.py 文件的 最后 导入这个文件,这样就可以覆盖里面的任何设置:
try:
from local_settings import *
except ImportError:
pass
这里的 try/except 是为了确保即使没有 local_settings 文件,程序也能正常运行。
当然,你也可以尝试把这两种方法结合起来使用。