Пути Django, разработка в windows, развертывание на linux

Я разрабатываю приложения Django на своей локальной машине windows, а затем развертываю на размещенном сервере linux. Формат для путей отличается между ними и ручной заменой перед развертыванием занимает больше времени, чем должно. Я мог бы кодировать на основе переменной в файле настроек и операторов if, но мне было интересно, есть ли у кого-нибудь лучшие практики для этого сценария.

4 ответов


книга 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. Что-то вроде этого:--3-->

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')

(вам нужно использовать ОС.путь.присоединиться(), вместо того, чтобы просто писать что-то вроде 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