2010-12-30 12 views
13

Me acaban de comenzar un estudio de viabilidad sobre Django para mi empresa y me he dado cuenta de la necesidad de rutas absolutas en settings.py:Django - ¿Cómo lidiar con los caminos en settings.py en proyectos de colaboración

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

Mi pregunta es: ¿Cómo lidiar con esta ruta absoluta cuando colaboras con un equipo? Digamos que si un miembro del equipo tiene que modificar las rutas después de obtener el proyecto del control de código fuente no solo será propenso a errores y perderá tiempo, sino que también causará complicaciones cuando este usuario tenga que realizar un cambio en settings.py. ¿Cómo puedo evitar esto?

Respuesta

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

Así es como me hago la importación relativos. Tenga en cuenta que, por lo general, es aconsejable tener un archivo separado de localsettings.py, o algo similar.

+0

¿Por qué el 'PWD = os.path.dirname predeterminado (os.path.dirname (__ file __))'? ¿Alguna diferencia? – User

+0

Tenga en cuenta que en Windows este método creará rutas que tienen barras diagonales inversas, lo que va en contra de los documentos de Django (por ejemplo, [https://docs.djangoproject.com/en/1.7/ref/settings/](https://docs .djangoproject.com/es/1.7/ref/settings/# name) y los comentarios en el fragmento de arriba). – dhobbs

2

settings.py es simplemente otro módulo de Python. Importe y use las diversas funciones en os.path para construir sus rutas.

3

hacer esto:

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

Esto establecerá los caminos de acuerdo con el directorio de archivo settings.py

1

La alternativa a usar la ruta relativa desde el archivo settings.py, es que cada desarrollador tenga su propia settings.py.

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

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

Las importaciones dev-x-settings.py todos los ajustes del archivo de base, y los cambios de las partes y piezas que necesitan. También es muy útil para mantener una base de datos sqlite local y similares.

Normalmente nos propusimos nuestra configuración como:

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

Entonces todo lo que tiene que preocuparse es ejecutar el servidor y pasándole el archivo settings.py correcta.

1

Además de utilizar os.path se podría añadir

try: 
    import * from settings_local 
except: 
    pass 

al final de que settings.py. ¡Cada desarrollador puede entonces crear su propio archivo settings_local.py que no está registrado en el VCS!

Cuestiones relacionadas