2014-10-19 3 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.

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` 

UPDATE

Если вы используете Python 3.4+, вы можете использование pathlib:

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

Спасибо. Как я могу теперь ссылаться на DATA_ROOT в моем файле представлений? – Karnivaurus

+0

@ Karnivaurus, я обновил ответ, чтобы включить использование файла DATA_ROOT в файле вида. – falsetru

Смежные вопросы