使用蓝图静态路由时,Flask 会针对蓝图静态文件引发 404 错误

问题描述 投票:0回答:2

我有一个蓝图,

home
,在我的 Flask 应用程序上带有前缀
/
。该蓝图有一个静态文件夹,并使用
static_folder
参数进行配置。但是,链接到蓝图的静态文件会返回 404 错误,即使该文件存在并且 url 看起来正确。为什么蓝图不提供静态文件?

myproject/
    run.py
    myapp/
        __init__.py
        home/
            __init__.py
            templates/
                index.html
            static/
                css/
                    style.css

myapp/__init__.py

from flask import Flask

application = Flask(__name__)

from myproject.home.controllers import home

application.register_blueprint(home, url_prefix='/')

myapp/home/controllers.py

from flask import Blueprint, render_template

home = Blueprint('home', __name__, template_folder='templates',
                                   static_folder='static')

@home.route('/')
def index():
    return render_template('index.html')

myapp/home/templates/index.html

<head>
<link rel="stylesheet" 
      href="{{url_for('home.static', filename='css/style.css')}}">
</head>
<body>
</body>

myapp/home/static/css/style.css

body {
    background-color: green;
}
python flask
2个回答
12
投票

您与 Flask 静态文件夹和您的蓝图发生冲突。由于蓝图安装在

/
,因此它与应用程序共享相同的静态 url,但应用程序的路由优先。更改蓝图的静态 url,这样就不会冲突。

home = Blueprint(
    'home', __name__,
    template_folder='templates',
    static_folder='static',
    static_url_path='/home-static'
)

6
投票

最后根据朋友的回答,我自己找到了正确的答案。 唯一的变化应该是这样的:

myapp/init.py:

application = Flask(__name__, static_folder=None)

myapp/home/controllers.py:

home = Blueprint('home', __name__, template_folder='templates', static_folder='static', static_url_path='static')

myapp/home/templates/index.html:

    <link rel="stylesheet" href="{{url_for('home.static', filename='style.css')}}">
© www.soinside.com 2019 - 2024. All rights reserved.