24

私のFlaskアプリケーションの構造は次のようになります

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

を実行するとrunserver.py、でサーバーが起動しますlocalhost:5000。私の場合、ファイルを views.py次のように開こうとしますenglish.txt

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

エラーが発生しますIOError: No such file or directory

このファイルにアクセスするにはどうすればよいですか?

4

3 に答える 3

52

問題はあなたが道に入るということだと思い/ます。と同じレベルにある/ため、削除します。staticviews.py

または、多くのFlaskユーザーが使用することを好むが、私は使用しないsettings.pyのと同じレベルにすることをお勧めします。views.py__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()

要件に基づいてパスとレベルを調整します。

于 2013-02-12T05:45:12.140 に答える
10

CppLearnersの回答に代わる簡単な方法は次のとおりです。

from flask import current_app

with current_app.open_resource('static/english_words.txt') as f:
    f.read()

こちらのドキュメントを参照してください:Flask.open_resource

于 2019-01-31T09:03:36.323 に答える
3

フラスコには、ルートディレクトリを解決するためのapp名前のプロパティと、モジュールを必要としない特定のディレクトリのプロパティもありますが、@jpihlの回答は気に入っています。root_pathinstance_pathappos

with open(f'{app.root_path}/static/english_words.txt', 'r') as f:
    f.read()
于 2021-08-20T15:17:18.123 に答える