2013-07-01 23 views
7

Moja aplikacja Django musi odczytać niektóre pliki tekstowe z systemu plików. Tworzę katalog w moim katalogu aplikacji i używam ścieżki względnej do otwarcia i odczytu z pliku.Jak używać ścieżki względnej do odczytywania plików lokalnych w aplikacji Django?

areas = parseXmlFile('xml_files/area.xml') 

Kiedy uruchomić serwer do debugowania przy użyciu manage.py runserver, że jest OK. Ale mogę uruchomić serwer korzystając manage.py runfcgi host=127.0.0.1 port=8081, Django nie może znaleźć pliku: No such file or directory: 'xml_files/area.xml'

Nie chcesz użyć ścieżki bezwzględnej, to znaczy, że trzeba zmodyfikować dużo kodu.

Jak mogę rozwiązać problem, aby użyć względnej ścieżki do otwarcia lokalnego pliku?

Odpowiedz

15

Proponuję użyć absolute path, ale w bardziej sprytny sposób. Zadeklarować w settings.py coś jak XMLFILES_FOLDER i mieć swój settings.py takiego:

import os 
settings_dir = os.path.dirname(__file__) 
PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir)) 
XMLFILES_FOLDER = os.path.join(PROJECT_ROOT, 'xml_files/') 

to przy założeniu, że xml_files folderu mieszka w folderze głównym projektu, jeśli nie, to po prostu zadeklarować względną ścieżkę z folderu głównego projektu do xml_files

XMLFILES_FOLDER = os.path.join(PROJECT_ROOT, 'f1/f2/xml_files/') 

ten sposób, gdziekolwiek w kodzie chcesz uzyskać dostęp do plików wewnątrz tego katalogu po prostu zrobić:

from settings import XMLFILES_FOLDER 
path = XMLFILES_FOLDER+'area.xml' 

To podejście zadziała w każdym systemie operacyjnym i bez względu na to, że zmieni się folder projektu, nadal będzie działać.

Mam nadzieję, że to pomoże!

+0

To mi bardzo pomaga. Dziękuję Ci. – bitcold

+0

@bitcold jesteś mile widziany. Czy możesz zaakceptować odpowiedź, jeśli była pomocna? –

7

@Paulo Bu odpowiedź jest poprawna, ale nieaktualna. Współczesne pliki settings.py mają zmienną BASE_DIR, której można użyć do tego celu.

import os 
from yourproject.settings import BASE_DIR 
file_path = os.path.join(BASE_DIR, 'relative_path') 

Należy pamiętać, że ścieżka względna pochodzi z folderu głównego projektu Django.

+0

Super! Dobrze wiedzieć :) –

+0

Lepiej używać 'od ustawień importu django.conf', jest bardziej niezależny od struktury. –

Powiązane problemy