2013-02-12 8 views
15

マイフラスコアプリケーション構造はFlask:アプリケーションルートでファイルを読むには?

application_top/ 
     application/ 
        static/ 
          english_words.txt 
        templates/ 
          main.html 
        urls.py 
        views.py 
     runserver.py 

私はrunserver.pyを実行すると、それはlocalhost:5000でサーバーを起動しますように見えます。私views.pyで は、私はそれは私がこのファイルにアクセスすることができますどのようにエラーにIOError: No such file or directory

を与える

f = open('/static/english.txt') 

としてファイル english.txtを開こうか?

+2

'static'は' views.py'と同じレベルですが、 '/'なしで試してみてください。しかし、私はフルパスで '__file__'と' os.path .... 'モジュールを利用することをお勧めします。 – CppLearner

答えて

36

私は問題が/をパスに入れたと思います。 staticviews.pyと同じレベルであるため、/を削除してください。

私は、views.pyと同じレベルのsettings.pyを作成することをお勧めします。または、多くのFlaskユーザーが__init__.pyを使用することを好むが、そうではありません。

application_top/ 
    application/ 
      static/ 
       english_words.txt 
      templates/ 
       main.html 
      urls.py 
      views.py 
      settings.py 
    runserver.py 

これはあなたが設定する方法をされた場合は、これを試してください:あなたの意見では今

#settings.py 
import os 
# __file__ refers to the file settings.py 
APP_ROOT = os.path.dirname(os.path.abspath(__file__)) # refers to application_top 
APP_STATIC = os.path.join(APP_ROOT, 'static') 

、あなたは、単に行うことができます。

import os 
from settings import APP_STATIC 
with open(os.path.join(APP_STATIC, 'english_words.txt')) as f: 
    f.read() 

が上のベースパスとレベルを調整しますあなたの要件。

+1

あなたが 'config.py'を使っているなら、[this snippet](http://flask.pocoo.org/snippets/102/)を見てください。 – bahmait