2010-12-30 12 views
13

Właśnie rozpoczęła studium wykonalności Django dla mojej firmy i zauważyłem potrzebę ścieżek bezwzględnych w settings.py:Django - Jak radzić sobie ze ścieżkami w settings.py na projekty współpracy

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

Moje pytanie brzmi: jak poradzić sobie z tą bezwzględną ścieżką podczas współpracy z zespołem? Załóżmy, że jeśli członek zespołu musi zmodyfikować ścieżki po uzyskaniu projektu z kontroli źródła, nie tylko będzie to podatne na błędy i czas marnuje czas, ale także spowoduje komplikacje, gdy ten użytkownik musi zatwierdzić zmianę wprowadzoną w pliku settings.py. Jak mogę tego uniknąć?

Odpowiedz

27
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") 
) 

to jak zrobić import względne. Zauważ, że zwykle mądrze jest mieć osobny plik localsettings.py lub coś podobnego.

+0

Dlaczego jest domyślna nazwa pliku 'PWD = os.path.dirname (os.path.dirname (__ plik __))? Jakiekolwiek różnice? – User

+0

Należy zauważyć, że w systemie Windows ta metoda utworzy ścieżki z ukośnikami odwrotnymi, co jest sprzeczne z dokumentami Django (np. [Https://docs.djangoproject.com/en/1.7/ref/settings/](https://docs .djangoproject.com/en/1.7/ref/settings/# name) oraz komentarze w powyższym fragmencie). – dhobbs

2

settings.py to kolejny moduł Pythona. Zaimportuj i użyj różnych funkcji w celu stworzenia ścieżek w usłudze os.path.

3

Wykonaj:

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

Spowoduje to ustawienie ścieżki według katalogu settings.py pliku

1

Alternatywą dla używania ścieżki względnej z pliku settings.py jest posiadanie przez każdego programistę własnego ustawienia 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 importuje wszystkie ustawienia z pliku podstawowego i zmienia bity i kawałki, których potrzebują. Również bardzo przydatne do utrzymania lokalnej bazy danych sqlite i tym podobnych.

Zwykle określone nasze ustawienia jak:

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

Wtedy wszystko trzeba się martwić, jest uruchomiony serwer i przekazując mu poprawny plik settings.py.

1

Poza tym przy użyciu os.path można dodać

try: 
    import * from settings_local 
except: 
    pass 

na koniec was settings.py. Każdy programista może następnie stworzyć swój własny plik settings_local.py, który nie jest rejestrowany w VCS!

Powiązane problemy