Django - Как работать с путями в settings.py в совместных проектах - PullRequest
14 голосов
/ 30 декабря 2010

Я только что начал технико-экономическое обоснование для 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. Как я могу избежать этого?

Ответы [ 5 ]

30 голосов
/ 30 декабря 2010
import os.path

#Get the absolute path of the settings.py file's 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 или что-то подобное.

3 голосов
/ 30 декабря 2010

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

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

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

2 голосов
/ 30 декабря 2010

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

1 голос
/ 30 декабря 2010

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

try:
    import * from settings_local
except:
    pass

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

1 голос
/ 30 декабря 2010

В качестве альтернативы использованию относительного пути из файла 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...