我刚刚为我的公司开始了关于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进行更改时,这也会导致复杂化。我怎么能避免这个?
答案 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!