Я разрабатываю приложения Django на своей локальной машине окон, затем развертывающейся к размещенному серверу Linux. Формат для путей отличается между двумя и вручную заменяющий, прежде чем развертывание использует больше времени, чем это должно. Я мог кодировать на основе переменной в моем файле настроек и если операторы, но я задавался вопросом, были ли у любого лучшие практики для этого сценария.
В книге 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
.
У нас ситуация очень похожая на вашу, и мы использовали разные пути в настройках, основываясь на 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.
Добавьте
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 предпочитает '\')
в вашем 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