send_static_file 未从蓝图中根目录的静态文件夹中获取

jet*_*com 1 python static-files blueprint flask

views.py我的蓝图内部来看,我试图使用它send_static_file来交付一个index.html但无法让它工作

__init__.py我有一个名为 main 的蓝图,我在蓝图文件夹下对其进行初始化mod_main

from flask import Blueprint 
mod_main = Blueprint('main',name,static_folder='/static', static_url_path='/static') 
from . import views
Run Code Online (Sandbox Code Playgroud)

我的主要app初始化在__init__.pyapp文件夹下

app = Flask(__name__)
from .mod_main import mod_main as main_blueprint
app.register_blueprint(main_blueprint,url_prefix='/main')
Run Code Online (Sandbox Code Playgroud)

views.py蓝图main中的文件(mod_main文件夹)下

@mod_main.route('/')
def index():
    return mod_main.send_static_file('index.html')
Run Code Online (Sandbox Code Playgroud)

但它不断解决404 Not found。我如何提供根文件夹中的文件夹index.html下的任何线索(如果我在蓝图中创建一个静态文件夹,我可以让它工作。但我想从根目录传递它)staticappapp

这是包含基本文件的结构

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

-- __init__.py

-- static /
   |
    -- index.html
Run Code Online (Sandbox Code Playgroud)

dir*_*irn 5

您已告诉蓝图在 或文件系统根目录中/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')
Run Code Online (Sandbox Code Playgroud)

但是,如果您打算使用现有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
Run Code Online (Sandbox Code Playgroud)