2010-12-30 9 views
13

ho appena iniziato uno studio di fattibilità su Django per la mia azienda e ho notato la necessità di percorsi assoluti su settings.py:Django - Come affrontare i percorsi in settings.py su progetti di collaborazione

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

La mia domanda è: come affrontare questo percorso assoluto quando collabori con un team? Supponiamo che, se un membro del team deve modificare i percorsi dopo aver ottenuto il progetto dal controllo del codice sorgente, questo sarà soggetto a errori e spreco di tempo ma causerà anche complicazioni quando questo utente dovrà eseguire una modifica su settings.py. Come posso evitare questo?

risposta

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

Ecco come faccio io le importazioni relative. Nota che di solito è consigliabile avere un file localsettings.py separato o qualcosa di simile.

+0

Perché il valore predefinito 'PWD = os.path.dirname (os.path.dirname (__ file __))'? Qualche differenza? – User

+0

Si noti che su Windows questo metodo creerà percorsi con barre rovesciate, che sono in contrasto con i documenti di Django (ad esempio, [https://docs.djangoproject.com/en/1.7/ref/settings/](https://docs .djangoproject.com/it/1.7/ref/settings/# name) e i commenti nello snippet sopra). – dhobbs

2

settings.py è solo un altro modulo Python. Importare e utilizzare le varie funzioni in os.path per creare i percorsi.

3

fare questo:

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

Questo imposterà i percorsi in base alla directory di file di settings.py

1

L'alternativa all'utilizzo del percorso relativo dal file settings.py è che ciascuno sviluppatore disponga delle proprie impostazioni.py.

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

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

Le importazioni dev-x-settings.py tutte le impostazioni dal file di base, e cambia i bit e pezzi che hanno bisogno di. Molto utile anche per mantenere un database sqlite locale e simili.

Noi di solito deciso nostre impostazioni come:

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

Poi tutto quello che dovete preoccuparvi è in esecuzione il server e passandogli il file settings.py corretto.

1

Oltre a utilizzare os.path si potrebbe aggiungere

try: 
    import * from settings_local 
except: 
    pass 

alla fine di voi settings.py. Ogni sviluppatore può quindi creare il proprio file settings_local.py che non è archiviato nel VCS!

Problemi correlati