Пути Django, развивающиеся в windows, развертывание на linux - PullRequest
7 голосов
/ 02 марта 2010

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

Ответы [ 4 ]

4 голосов
/ 02 марта 2010

Книга 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.

2 голосов
/ 02 марта 2010

У нас ситуация очень похожа на вашу, и мы использовали разные пути в настройках, исходя из 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.

1 голос
/ 02 марта 2010

Добавить

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 предпочитает '\')

0 голосов
/ 02 марта 2010

в вашем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...