2011-02-07 19 views
20

Ok, así que recuerdo que hay algunos comandos que podría poner en el archivo settings.py, de modo que, básicamente, cuando mueva su proyecto django a otro directorio, no lo bloquee.descubrimiento de raíz del proyecto django

Sé que podría hacer esto teniendo una variable de cadena en todas partes menciona el directorio de inicio, pero ¿hay una manera más elegante de hacer esto?

+1

Gracias a Ignacio por la rápida respuesta, de ella Pude encontrar este tutorial para aquellos que necesitan una explicación más completa. http://morethanseven.net/2009/02/11/django-settings-tip-setting-relative-paths.html – UserZer0

Respuesta

35

Capture el __file__ global, y utilice las diversas funciones en os.path en él.

import os.path 
SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) 
+3

Es muy útil crear una función lambda donde puede usar la variable SITE_ROOT más adelante: rel = lambda p : os.path.join (SITE_ROOT, p) Puede usarlo como: MEDIA_ROOT = rel ('static_media') – schneck

11
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
74

La arquitectura de un proyecto en Django

  • root/

    • app1/
    • app2/
    • ...
    • principal/
      • settings.py

Dentro settings.py:

SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) -> da la ruta del archivo settings.py: raíz/main/. Esta es NO LA RAÍZ DEL PROYECTO

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) -> da la raíz del proyecto: root/. Esto es LA RAIZ DEL PROYECTO.

+1

Esta es una vieja pregunta, la estructura de archivos de django era diferente en ese momento. ¿Cómo encontraste esto de todos modos? :) También estaba siendo privado en el momento en que lo pedí también. Pero gracias. Te llamaré +1 ya que proporcionas información nueva. – UserZer0

+0

Voy a hacer +1 por esto porque él explicó ** POR QUÉ ** hacemos esto. – MrROY

+0

excelente respuesta, bien explicada ... –

24

Django 1.8 ya incluye el directorio raíz del proyecto como BASE_DIR:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

Y se puede utilizar en su aplicación mediante la importación de settings:

from django.conf import settings 
... 
... 
print(settings.BASE_DIR) 
Cuestiones relacionadas