Django settings.py:分离本地与全局配置

5 投票
2 回答
4594 浏览
提问于 2025-04-16 15:17

我在想,能不能把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 文件,程序也能正常运行。

当然,你也可以尝试把这两种方法结合起来使用。

撰写回答