2012-10-25 10 views
7

私はこの1つに非常に固執しています! 外部データベースからデータを読み込むDjangoビューを作成しています。これを行うために、私は標準のMySQLdbライブラリを使用しています。 データをロードするには、非常に長く複雑なクエリを実行する必要があります。私は自分のビューでそのクエリをハードコードすることができ、それはうまく動作します。 しかし、それは実用的ではないと思います。私は将来、クエリを変更できるようにするため、テキストファイルからステートメントをロードしようとします。 私の問題は、どこに保存するか、そのファイルを開く方法がわからないことです。どこにいても、 "No such file or directory"というエラーが出ます。ビューのコードと同じディレクトリに保存することもできません。djangoのローカルファイルを読む

アップロードされたファイルではありません。それは私のコードを完成させる単なる外部ファイルです。 アイデア ありがとうございます!

+0

まあ、実際に私がビューのコードと通常の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

前の答えの後、それは私がheheでした。しかし、私はsettings.pyにクエリを保存するという考えも好きです! – fenomenoxp

関連する問題