Flask 404'ing在我的资产目录静态内容

2024-05-15 23:00:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目结构如下所示:

/project home
app.py
/templates/index.html
/templates/assets

我的index.html文件中有几个对相关样式表的引用,如下所示:

<link rel="stylesheet" href="assets/css/slick.css">
<link rel="stylesheet" href="assets/css/slick-theme.css">

对于assets/JS中存在的各种JS文件也是如此。现在,当我加载页面时,出现以下错误:

Loading failed for the <script> with source “http://localhost:5000/assets/js/popper.min.js”. localhost:5000:564:1

在python调试器中,我看到了许多这样的消息:

127.0.0.1 - - [24/Dec/2019 18:29:16] "GET /assets/js/main.js HTTP/1.1" 404

我试着用谷歌搜索并在烧瓶里修改这条线

STATIC_URL_PATH = '/templates/assets/' # Where the css is stored
STATIC_FOLDER = '/templates/assets/'
app = flask.Flask(__name__, static_folder=STATIC_FOLDER,
            static_url_path=STATIC_URL_PATH)

但当我点击模板中的index.html页面时,它仍然能够很好地加载所有CSS、JS和图像,但是从Flask中,它就像去掉了CSS一样


Tags: 文件appindexhtmljslinkstaticcss
1条回答
网友
1楼 · 发布于 2024-05-15 23:00:10

首先,确保templates文件夹与app.py位于同一目录下:

.
├── app.py
└── templates
    └── assets

然后像这样创建Flask实例:

STATIC_FOLDER = 'templates/assets'
app = Flask(__name__,
            static_folder=STATIC_FOLDER)

第一,/templatestemplates(没有/)是两条不同的路径。第一个是指系统根路径/下的templates文件夹,它肯定不是您想要的。第二个是指同一目录中的templates文件夹,这是您想要的

第二,如果static_url_pathstatic_folder相同,则无需指定它,因为这是default behavior(“默认为static_folder文件夹的名称”)

然后,在HTML文件中,让Flask为您构建URL,而不是硬编码到assets文件夹的路径。参见烧瓶文档的Static Files部分:

To generate URLs for static files, use the special 'static' endpoint name:

url_for('static', filename='style.css')

默认情况下,它将在static文件夹下查找静态文件(例如static/style.css),因为它是Flask构造函数中的default value for the ^{} parameter。当您将其设置为templates/assets时,Flask将使用它,并使用url_for自动构建正确的URL

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

注意:
确保在测试静态文件加载时,先清除浏览器的缓存,或在浏览器的私有/匿名模式下测试应用程序,以强制重新下载静态文件

相关问题 更多 >