我正在我的本地Windows机器上开发Django应用程序,然后部署到托管的Linux服务器。路径的格式在两者之间是不同的,并且在部署之前手动替换消耗的时间超过它应该的时间。我可以根据我的设置文件和if语句中的变量进行编码,但我想知道是否有人有这种情况的最佳实践。
答案 0 :(得分:4)
Django书建议使用os.path.join
(并在Windows上使用斜杠而不是反斜杠):
import os.path
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
我认为这是最好的解决方案,因为您可以轻松创建这样的相对路径。如果您有多个相对路径,辅助函数将缩短代码:
def fromRelativePath(*relativeComponents):
return os.path.join(os.path.dirname(__file__), *relativeComponents).replace("\\","/")
如果您需要绝对路径,则应将环境变量(os.environ["MY_APP_PATH"]
)与os.path.join
结合使用。
答案 1 :(得分:2)
我们的情况与您的情况非常相似,我们在设置中使用了不同的路径,基于sys.platform
。
像这样:
import os, sys
DEVELOPMENT_MODE = sys.platform == 'win32'
if DEVELOPMENT_MODE:
HOME_DIR = 'c:\\django-root\\'
else:
HOME_DIR = '/home/django-root/'
它工作得很好 - 假设所有开发都在Windows上完成。
答案 2 :(得分:1)
添加
import os.path
BASE_PATH = os.path.dirname(__file__)
位于设置文件的顶部,然后在您想要使用相对于Django项目的路径的任何位置使用BASE_PATH
。
例如:
MEDIA_ROOT = os.path.join(BASE_PATH, 'media')
(你需要使用os.path.join(),而不是简单地编写类似MEDIA_ROOT = BASE_PATH+'/media'
的东西,因为Unix使用'/'连接目录,而windows更喜欢'\')
答案 3 :(得分:0)
在 settings.py 中添加以下行
import os.path
SETTINGS_PATH = os.path.abspath(os.path.dirname(__file__))
head, tail = os.path.split(SETTINGS_PATH)
#add some directories to the path
import sys
sys.path.append(os.path.join(head, "apps"))
#do what you want with SETTINGS_PATH