在我的一个应用程序中,我想从我的机器上的另一个目录加载一些数据。我的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')
答案 0 :(得分:1)
BASE_DIR + '../../../Data'
之间不包含适当的分隔。也可以在那里使用os.path.join
。
BTW,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`
<强>更新强>
如果您使用Python 3.4+,则可以使用pathlib
:
DATA_ROOT = pathlib.Path(__file__).resolve().parents[3] / 'Data' / 'MyAppData'