2012-10-25 96 views
7

我很困擾這個! 我正在寫一個從外部數據庫讀取數據的Django視圖。爲此,我使用標準的MySQLdb庫。 現在,要加載數據,我必須做一個非常漫長而複雜的查詢。我可以在我的視圖中硬編碼該查詢,並且工作得很好。 但我認爲這是不實際的;我希望能夠在將來更改查詢,所以我嘗試從文本文件加載語句。 我的問題是,我不知道在哪裏存儲以及如何打開該文件。無論我在哪裏,我都會得到一個「沒有這樣的文件或目錄」的錯誤。即使將其保存在與視圖代碼相同的目錄中也會失敗。閱讀django中的本地文件

請注意,這不是上傳的文件;它只是一個完成我的代碼的外部文件。 有什麼建議嗎? 在此先感謝!

+0

嗯,其實我試圖把它放在與view和normal open()函數的代碼相同的目錄中。因爲它失敗了,我試圖找到一些信息,但我嘗試失敗的所有信息(IE:把它放在我的應用程序的「靜態」子目錄中)。絕對路徑可以工作,但我仍然想要更多的靈活性 – fenomenoxp

回答

18

將文件保存在django項目根目錄下,並在settings.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 

但是,這並不能真正回答您的問題。假設權限和一切都是正確的,保持你的項目根引用您的設置是這樣的:

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

隨後又在你看來,打開你的文件,像這樣:

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

在上一個答案之後,這就是我所做的嘿嘿。但我也喜歡在settings.py中保存查詢的想法! – fenomenoxp