2010-03-01 87 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