2014-10-19 78 views
0

在我的一個應用程序中,我想從我的機器上的另一個目錄加載一些數據。我的Django項目位於C:/Projects/MyProject,我的應用程序位於C:/Projects/MyProject/myapp,我的數據目錄位於C:/Data/MyAppData。出於各種原因,我不想將這些數據直接存儲在應用程序的靜態目錄中。我怎樣才能做到這一點?引用項目外部的相關目錄

這是我試過的。在C:/Projects/MyProject/settings.py,我有以下幾點:

import os 
DATA_ROOT = `C:/Data` 
DATA_DIR = os.path.join(DATA_ROOT, 'MyAppData') 

但我怎麼現在引用我的觀點文件DATA_DIR

此外,假設我想保留所有的相關內容,並避免硬編碼C:/Data。這可能嗎?類似以下內容:

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
DATA_ROOT = BASE_DIR + '../../../Data' 
DATA_DIR = os.path.join(DATA_ROOT, 'MyAppData') 

回答

1

BASE_DIR + '../../../Data'不包含適當的單獨介於兩者之間。那裏也使用os.path.join

順便說一句,os.path.join接受多個參數。所以,你可以寫爲:

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
DATA_ROOT = os.path.join(BASE_DIR, '../../../Data', 'MyAppData') 

# To get absolute path 
DATA_ROOT = os.path.abspath(os.path.join(BASE_DIR, '../../../Data', 'MyAppData')) 

要訪問視圖的DATA_ROOT,在視圖中導入settings

from django.conf import settings 

# Do something with `settings.DATA_ROOT` 

UPDATE

如果使用Python 3.4+,你可以使用pathlib

DATA_ROOT = pathlib.Path(__file__).resolve().parents[3]/'Data'/'MyAppData' 
+0

謝謝。我現在如何在我的視圖文件中引用DATA_ROOT? – Karnivaurus 2014-10-19 15:28:39

+0

@Karnivaurus,我更新了答案,在視圖文件中包含了'DATA_ROOT'的用法。 – falsetru 2014-10-19 15:29:47