2011-02-07 5 views
20

Ok, quindi ricordo che ci sono alcuni comandi che potresti inserire nel file settings.py in modo che, in pratica, quando sposti il ​​tuo progetto django in un'altra directory, questo non verrà cancellato.auto-riscoperta root del progetto django

So che potrei farlo con una variabile stringa ovunque menziona la directory home ma esiste un modo più elegante per farlo?

+1

Grazie a Ignacio per la rapida risposta, da esso Sono stato in grado di trovare questo tutorial per coloro che hanno bisogno di una spiegazione più completa. http://morethanseven.net/2009/02/11/django-settings-tip-setting-relative-paths.html – UserZer0

risposta

35

Afferrare il __file__ globale e utilizzare le varie funzioni in os.path su di esso.

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

È molto utile creare una funzione lambda in cui è possibile utilizzare la variabile SITE_ROOT in seguito: rel = lambda p : os.path.join (SITE_ROOT, p) Puoi usarlo come: MEDIA_ROOT = rel ('static_media') – schneck

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

L'architettura di un progetto in Django

  • root/

    • app1/
    • app2/
    • ...
    • principale/
      • settings.py

All'interno settings.py:

SITE_ROOT = os.path.dirname(os.path.realpath(__file__)) -> restituisce il percorso del file settings.py: root/main/. Questo è NON LA RADICE DEL PROGETTO

PROJECT_PATH = os.path.abspath(os.path.dirname(__name__)) -> dà la radice del progetto: root/. Questo è LA RADICE DEL PROGETTO.

+1

Questa è una vecchia domanda, la struttura dei file di django era diversa al momento. Come l'hai trovato comunque? :) Inoltre è stato deprecato nel momento in cui l'ho chiesto anch'io. Ma grazie. Ti faccio +1 da quando fornisci nuove informazioni. – UserZer0

+0

Farò +1 per questo perché ha spiegato ** PERCHÉ ** lo facciamo. – MrROY

+0

risposta superba, ben spiegato ... –

24

Django 1.8 include già la directory radice del progetto come BASE_DIR:

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

ed è possibile utilizzarlo nella vostra applicazione importando settings:

from django.conf import settings 
... 
... 
print(settings.BASE_DIR) 
Problemi correlati