2013-07-01 15 views
7

Django uygulamamın dosya sisteminden bazı metin dosyalarını okuması gerekiyor. Bu yüzden, uygulama dizinimde bir dizin oluşturuyorum ve dosyadan açmak ve okumak için göreli yolu kullanıyorum. Ben manage.py runserver kullanarak hata ayıklama sunucusu çalıştırdığınızdaDjango uygulamasında yerel dosyaları okumak için göreli yolu nasıl kullanabilirim?

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

, sorun değil. Ama ben manage.py runfcgi host=127.0.0.1 port=8081 kullanarak sunucu çalıştırıyorum, Django dosyayı bulamıyor: No such file or directory: 'xml_files/area.xml'

Mutlak yol kullanmak istemiyorum, bu çok kodu değiştirmem gerekiyor demektir.

Yerel dosyayı açmak için ilgili yolu kullanmak için bu sorunu nasıl çözebilirim?

cevap

15

absolute path'u kullanmanızı öneririz, ancak daha akıllıca. XMLFILES_FOLDER sevdiği settings.py şey beyan ve bu gibi settings.py vardır:

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

Bu xml_files klasör proje kök klasörü altında yaşadığını varsayarak, değilse, sadece xml_files proje kök klasörden göreli yolu beyan kodunuzda yalnızca bu dizinin içindeki bir dosyaya erişmek istediğiniz yere

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

bu şekilde, sadece yapın:

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

Bu yaklaşım herhangi bir işletim sisteminde çalışır ve projenin klasörünü değiştirirseniz de, yine de çalışır.

Bu yardımcı olur umarız!

+0

Bu bana çok yardımcı oluyor. Teşekkür ederim. – bitcold

+0

@bitcold sizi bekliyor. Yardımcı olduysa cevabı kabul edebilir misin? –

7

@Paulo Bu cevap doğru, ancak güncel değil. Modern günlük settings.py dosyalarında, bu çaba için kullanabileceğiniz bir BASE_DIR değişkeni vardır.

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

Ayı göreli yolu sizin Django projenin kök klasörden olduğunu akılda.

+0

Serin! Bilmekte fayda var :) –

+0

'django.conf içe aktarma ayarlarından 'kullanmak daha iyidir, daha fazla yapı bağımsızdır. –

İlgili konular