Flask: Как прочитать файл в корне приложения?

Структура приложения My 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

Как я могу получить доступ к этому файлу?

Ответы

Ответ 1

Я думаю, проблема в том, что вы положили / в путь. Удалите /, потому что static находится на том же уровне, что и views.py.

Я предлагаю сделать settings.py на том же уровне, что и views.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()

Отрегулируйте путь и уровень в соответствии с вашими требованиями.

Ответ 2

Вот простая альтернатива ответу CppLearners:

from flask import current_app

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

Смотрите документацию здесь: Flask.open_resource