Django - Как бороться с путями в settings.py по совместным проектам

Я только что начал технико-экономическое исследование Django для своей компании, и я заметил необходимость абсолютных путей в settings.py:

TEMPLATE_DIRS = (
   # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
   # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

Мой вопрос: как бороться с этим абсолютным путем, когда вы сотрудничаете с командой? Скажем, если член команды должен изменить пути после получения проекта из исходного управления, это не только будет подвержено ошибкам, но и будет расточительным, но это также вызовет осложнения, когда этот пользователь должен внести изменения, внесенные в settings.py. Как я могу избежать этого?

Ответы

Ответ 1

import os.path

#Get the absolute path of the settings.py file directory
PWD = os.path.dirname(os.path.realpath(__file__ )) 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or 
    # "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.

    #Add Templates to the absolute directory
    os.path.join(PWD, "Templates") 
)

То, как я делаю относительный импорт. Обратите внимание, что обычно разумно иметь отдельный файл localsettings.py или что-то подобное.

Ответ 2

Сделайте это:

import os
ROOT_PATH = os.path.dirname(__file__)
.
.
.
TEMPLATE_DIRS = (
    os.path.join(ROOT_PATH, 'templates'),
)

Это установит пути в соответствии с каталогом файла settings.py

Ответ 3

settings.py - это еще один модуль Python. Импорт и использование различных функций в os.path для создания ваших путей.

Ответ 4

Альтернатива использованию относительного пути из файла settings.py для каждого разработчика имеет свои собственные settings.py.

# settings.py
TEMPLATE_DIRS = (
    'c:\django\templates\',
)

# dev-x-settings.py
import settings
TEMPLATE_DIRS = (
    'd:\dev\django\project\templates\'
)

dev-x-settings.py импортирует все настройки из базового файла и изменяет бит и куски, в которых они нуждаются. Также очень удобно поддерживать локальную базу данных sqlite и т.д.

Обычно мы устанавливаем наши настройки как:

/settings/
    __init__.py
    production.py
    staging.py
    test.py
    dev-x.py
    dev-y.py

Тогда все, о чем вам нужно беспокоиться, - это запустить сервер и передать ему правильный файл settings.py.

Ответ 5

Помимо использования os.path, вы можете добавить

try:
    import * from settings_local
except:
    pass

в конце вас settings.py. Затем каждый разработчик может создать свой собственный файл settings_local.py, который не установлен в VCS!