send_static_file没有从Blueprint中root的静态文件夹中获取

时间:2014-09-29 13:51:52

标签: python flask static-files blueprint

从我的蓝图中的views.py开始,我尝试使用send_static_file投放index.html并且无法让它工作

我有一个名为main的蓝图,我在蓝图文件夹__init__.py

下的mod_main中进行了初始化
from flask import Blueprint 
mod_main = Blueprint('main',name,static_folder='/static', static_url_path='/static') 
from . import views

在我的主app初始化__init__.py根目录下的app

app = Flask(__name__)
from .mod_main import mod_main as main_blueprint
app.register_blueprint(main_blueprint,url_prefix='/main')

在蓝图主页(views.py文件夹)中的mod_main文件下

@mod_main.route('/')
def index():
    return mod_main.send_static_file('index.html')

但它一直在解决404 Not found。任何线索如何我可以提供根index.html文件夹中static文件夹下的app(如果我在蓝图中创建一个静态文件夹,我可以让它工作。但是我我想从根app

传递它

继承了必要文件的结构

app
|
-- mod_main/
   |
    -- views.py
    -- __init__.py

-- __init__.py

-- static /
   |
    -- index.html

1 个答案:

答案 0 :(得分:3)

您已经告诉蓝图在/static中找到静态文件,或者在文件系统的根目录中找到名为static的文件夹。假设您不想将其更改为static并将文件夹移至mod_main,则可以采用几种不同的方法。

如果要区分应用程序的静态文件和蓝图的静态文件,可以通过当前应用程序提供文件。

# mod_main/views.py
from flask import current_app

from . import mod_main


@mod_main.route('/')
def index():
    return current_app.send_static_file('index.html')

但是,如果您打算使用现有的static作为唯一的静态文件夹,则需要更新蓝图才能使用此文件夹。

# mod_main/__init__.py
import os

from flask import Blueprint

static_folder = os.path.join(os.pardir, 'static')
mod_main = Blueprint(
    'main', __name__, static_folder=static_folder, static_url_path='/static')

from . import views