Django路径,在Windows中开发,部署在Linux上
问题描述:
我正在开发本地Windows机器上的Django应用程序,然后部署到托管的Linux服务器。路径的格式在两者之间是不同的,并且在部署消耗更多时间之前手动替换。我可以根据设置文件中的变量进行编码,但是如果有人想知道是否有人有这种情况的最佳做法。Django路径,在Windows中开发,部署在Linux上
答
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
。
答
我们的情况与您的情况非常相似,我们一直在使用不同的设置路径,基于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上完成的。
答
添加
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更倾向于用 '\' )
答
在
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
这是最好的答案,你可以在windows和linux中使用斜杠。反斜杠是我遇到的最大问题。 – marr75 2010-03-02 14:16:10
你可能想使用'posixpath.join()'而不是'os.path.join()。replace()' - 它使你的意图清晰:无论你的操作系统是什么,你都需要一个POSIX风格的路径。 – 2010-08-27 10:54:52
@CraigTrader:使用'posixpath.join()'是一个不错的主意,但是它不会删除已加入路径组件的反斜杠(例如,从'os.path.dirname(__ file __)')。 – dhobbs 2015-02-25 19:14:12