Django - 如何处理协作项目中settings.py中的路径

时间:2010-12-30 11:35:26

标签: python django

我刚刚为我的公司开始了关于Django的可行性研究,我注意到在settings.py上需要绝对路径:

TEMPLATE_DIRS = (
   # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
   # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

我的问题是:当你与团队合作时,如何处理这些绝对路径?比如说,如果团队成员在从源代码控制获取项目后必须修改路径,那么这不仅会出错,而且浪费时间,但是当用户必须对settings.py进行更改时,这也会导致复杂化。我怎么能避免这个?

5 个答案:

答案 0 :(得分:30)

import os.path

#Get the absolute path of the settings.py file's directory
PWD = os.path.dirname(os.path.realpath(__file__ )) 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or 
    # "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.

    #Add Templates to the absolute directory
    os.path.join(PWD, "Templates") 
)

这就是我做相对进口的方式。请注意,通常明智的做法是使用单独的localsettings.py文件或类似文件。

答案 1 :(得分:3)

这样做:

import os
ROOT_PATH = os.path.dirname(__file__)
.
.
.
TEMPLATE_DIRS = (
    os.path.join(ROOT_PATH, 'templates'),
)

这将根据settings.py文件目录设置路径

答案 2 :(得分:2)

settings.py只是另一个Python模块。导入并使用os.path中的各种功能来构建路径。

答案 3 :(得分:1)

使用settings.py文件中的相对路径的替代方法是让每个开发人员拥有自己的settings.py。

# settings.py
TEMPLATE_DIRS = (
    'c:\django\templates\',
)

# dev-x-settings.py
import settings
TEMPLATE_DIRS = (
    'd:\dev\django\project\templates\'
)

dev-x-settings.py从基本文件导入所有设置,并更改所需的位和部分。同样非常方便维护本地sqlite数据库等。

我们通常将设置设置为:

/settings/
    __init__.py
    production.py
    staging.py
    test.py
    dev-x.py
    dev-y.py

然后,您需要担心的是运行服务器并向其传递正确的settings.py文件。

答案 4 :(得分:1)

除了使用os.path之外,您还可以添加

try:
    import * from settings_local
except:
    pass

在你的最后settings.py。然后,每个开发人员都可以创建自己的settings_local.py文件,该文件未签入VCS!