2013-07-01 145 views
7

我的django應用程序必須從文件系統讀取一些文本文件。所以我在我的應用程序目錄中創建一個目錄,並使用相對路徑打開並從文件中讀取。如何使用相對路徑來讀取Django應用程序中的本地文件?

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

當我運行服務器調試使用manage.py runserver,沒關係。但我運行服務器使用manage.py runfcgi host=127.0.0.1 port=8081,Django無法找到該文件:No such file or directory: 'xml_files/area.xml'

我不想使用絕對路徑,這意味着我需要修改很多代碼。

如何解決使用相對路徑打開本地文件的問題?

回答

15

我建議你使用absolute path,但要以更聰明的方式。聲明在settings.pyXMLFILES_FOLDER,有你的settings.py這樣的:

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/') 

這是假設xml_files文件夾居住項目的根文件夾下,如果沒有,只是申報的xml_files從項目的根文件夾中的相對路徑

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

這樣一來,無論在你的代碼要訪問該目錄中的文件,你只是做:

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

這種方法適用於任何操作系統,無論您更改項目文件夾,它仍然可以工作。

希望這會有所幫助!

+0

這對我很有幫助。謝謝。 – bitcold

+0

@bitcold你是最受歡迎的。如果有幫助,你能接受答案嗎? –

7

@Paulo Bu的回答是對的,但過時了。現代的settings.py文件有一個BASE_DIR變量,您可以使用這個變量。

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

請記住,相對路徑來自您的Django項目的根文件夾。

+0

酷!很高興知道:) –

+0

最好使用'from django.conf import settings',它更獨立於結構。 –

相關問題