django

2012-10-25 9 views
7

में एक स्थानीय फ़ाइल पढ़ें मैं इस पर काफी अटक गया हूँ! मैं एक Django दृश्य लिख रहा हूं जो बाहरी डेटाबेस से डेटा पढ़ता है। ऐसा करने के लिए, मैं मानक MySQLdb लाइब्रेरी का उपयोग कर रहा हूं। अब, डेटा लोड करने के लिए, मुझे एक बहुत लंबी और जटिल क्वेरी करना होगा। मैं अपने कोड में क्वेरी को कड़ी मेहनत कर सकता हूं और यह ठीक काम करता है। लेकिन मुझे लगता है कि यह व्यावहारिक नहीं है; मैं भविष्य में क्वेरी को बदलने में सक्षम होना चाहता हूं, इसलिए मैं एक टेक्स्ट फ़ाइल से कथन लोड करने का प्रयास करता हूं। मेरी समस्या यह है कि मुझे नहीं पता कि कहां स्टोर करना है और उस फ़ाइल को कैसे खोलें। जहां भी मैं करता हूं, मुझे "ऐसी कोई फ़ाइल या निर्देशिका नहीं" त्रुटि मिलती है। दृश्य के कोड की तुलना में इसे उसी निर्देशिका में सहेजना भी विफल रहता है।django

ध्यान दें कि यह एक अपलोड की गई फ़ाइल नहीं है; यह सिर्फ एक बाहरी फाइल है जो मेरा कोड पूरा करती है। कोई विचार? अग्रिम धन्यवाद!

+0

खैर,:

ROOT_PATH = os.path.split(os.path.abspath(__file__))[0] 

और फिर फिर से अपने ध्यान में रखते हुए, इसलिए की तरह अपने फ़ाइल को खोलने के इसे दृश्य के कोड और सामान्य खुले() फ़ंक्शन के रूप में एक ही सख्त में डालने की कोशिश की थी। चूंकि यह असफल रहा, मैंने कुछ जानकारी खोजने की कोशिश की, लेकिन मैंने कोशिश की असफल (आईई: इसे मेरे ऐप की "स्थैतिक" उपनिर्देशिका में डाल दिया)। एक पूर्ण पथ काम करेगा, लेकिन मैं अभी भी अधिक लचीलापन – fenomenoxp

उत्तर

18

फ़ाइल को django प्रोजेक्ट रूट में रखें और सेटिंग्स.py फ़ाइल में निम्न जोड़ें।

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

फिर दृश्य में ऐसा करें।

import os 
from django.conf.settings import PROJECT_ROOT 

file_ = open(os.path.join(PROJECT_ROOT, 'filename')) 
+0

चाहता था कि चाल है! बहुत धन्यवाद – fenomenoxp

3

इस उपयोग के लिए, मैं इसे सेटिंग मॉड्यूल में रखूंगा। settings.py में, उदा। MY_LONG_QUERY = 'from FOO select BAR...'। फिर, अपने दृश्य में इसे केवल सेटिंग्स से लोड करें:

from django.conf import settings 
settings.MY_LONG_QUERY 

लेकिन, यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है। अनुमतियाँ मान लिया जाये और सभी सही हैं, इस तरह से अपनी सेटिंग्स में अपनी परियोजना के रूट के लिए एक संदर्भ रखें: वास्तव में मैं

from django.conf import settings 

def read_from_database(request): 
    f = open(os.path.join(settings.ROOT_PATH, 'myfile.db')) 
    # Do something with f 
+0

पिछले उत्तर के बाद, यह वही है जो मैंने किया था। लेकिन मुझे सेटिंग्स.py में क्वेरी को सहेजने का विचार भी पसंद है! – fenomenoxp