2010-03-01 14 views
7

Estoy desarrollando aplicaciones Django en mi máquina Windows local y luego implementándolas en un servidor Linux alojado. El formato de las rutas es diferente entre las dos y reemplaza manualmente antes de que la implementación consuma más tiempo de lo que debería. Pude codificar en función de una variable en mi archivo de configuración y declaraciones if, pero me preguntaba si alguien tenía las mejores prácticas para este escenario.Trayectorias Django, desarrollo en Windows, implementación en Linux

Respuesta

4

El libro de Django sugiere el uso os.path.join (y utilizar barras en lugar de barras invertidas en Windows):

import os.path 

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'), 
) 

Creo que esta es la mejor solución, ya que puede crear fácilmente las rutas relativas como esas. Si tiene varias rutas relativas, una función auxiliar acortará el código:

def fromRelativePath(*relativeComponents): 
    return os.path.join(os.path.dirname(__file__), *relativeComponents).replace("\\","/") 

Si necesita rutas absolutas, se debe utilizar una variable de entorno (con os.environ["MY_APP_PATH"]) en combinación con os.path.join.

+0

Esta es la mejor respuesta, puede usar barras en windows y linux. Las barras invertidas fueron el mayor problema que tuve. – marr75

+2

Es posible que desee utilizar 'posixpath.join()' en lugar de 'os.path.join(). Replace()' - hace que su intención sea clara: desea una ruta de estilo POSIX independientemente de su sistema operativo. –

+0

@CraigTrader: es una buena idea usar 'posixpath.join()', pero eso no eliminará las barras invertidas que ya están en los componentes de ruta que se unirán (por ejemplo, de 'os.path.dirname (__ file __)' – dhobbs

2

Tenemos una situación muy similar a la suya, y hemos estado usando diferentes rutas en la configuración, basándonos en sys.platform. Algo como esto:

import os, sys 
DEVELOPMENT_MODE = sys.platform == 'win32' 
if DEVELOPMENT_MODE: 
    HOME_DIR = 'c:\\django-root\\' 
else: 
    HOME_DIR = '/home/django-root/' 

Funciona bastante bien - asume todo el desarrollo que se está haciendo en Windows.

1

Añadir

import os.path 

BASE_PATH = os.path.dirname(__file__) 

en la parte superior de su archivo de configuración, y luego utilice BASE_PATH todas partes que desea utilizar una ruta relativa a su proyecto Django.

Por ejemplo:

MEDIA_ROOT = os.path.join(BASE_PATH, 'media') 

(Es necesario utilizar os.path.join(), en lugar de simplemente escribir algo así como MEDIA_ROOT = BASE_PATH+'/media', porque Unix une directorios usando '/', mientras que las ventanas prefiere '\')

0

en su settings.py añadir las siguientes líneas

import os.path 

SETTINGS_PATH = os.path.abspath(os.path.dirname(__file__)) 
head, tail = os.path.split(SETTINGS_PATH) 

#add some directories to the path 
import sys 
sys.path.append(os.path.join(head, "apps")) 
#do what you want with SETTINGS_PATH 
Cuestiones relacionadas