Django路径,在windows中开发,在linux上部署

时间:2010-03-01 21:27:19

标签: django path

我正在我的本地Windows机器上开发Django应用程序,然后部署到托管的Linux服务器。路径的格式在两者之间是不同的,并且在部署之前手动替换消耗的时间超过它应该的时间。我可以根据我的设置文件和if语句中的变量进行编码,但我想知道是否有人有这种情况的最佳实践。

4 个答案:

答案 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