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

我认为问题是你把/路径。删除/因为static与 处于同一级别views.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还有一个名为root_path解析根目录的属性以及一个不需要模块instance_path的特定目录的属性,尽管我喜欢@jpihl 的回答。appos

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