2010-03-01 85 views
7

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

回答

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

+0

这是最好的答案,你可以在windows和linux中使用斜杠。反斜杠是我遇到的最大问题。 – marr75 2010-03-02 14:16:10

+2

你可能想使用'posixpath.join()'而不是'os.path.join()。replace()' - 它使你的意图清晰:无论你的操作系统是什么,你都需要一个POSIX风格的路径。 – 2010-08-27 10:54:52

+0

@CraigTrader:使用'posixpath.join()'是一个不错的主意,但是它不会删除已加入路径组件的反斜杠(例如,从'os.path.dirname(__ file __)')。 – dhobbs 2015-02-25 19:14:12

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上完成的。

1

添加

import os.path 

BASE_PATH = os.path.dirname(__file__) 

在你的设置文件的顶部,然后用BASE_PATH无处不在,你想一个相对路径来你的Django项目。

例如:

MEDIA_ROOT = os.path.join(BASE_PATH, 'media') 

(您需要使用os.path.join(),而不是简单地写东西像MEDIA_ROOT = BASE_PATH+'/media',因为Unix的使用连接 '/' 目录,而Windows更倾向于用 '\' )

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