引用项目外的相关目录

时间:2014-10-19 15:21:27

标签: python django

在我的一个应用程序中,我想从我的机器上的另一个目录加载一些数据。我的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 个答案:

答案 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'