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!