无法在Flask应用中通过url_for使用静态文件

时间:2019-12-29 00:01:09

标签: python flask

我通过YouTube教程学习Flask。每次(现在是我的第3个Flask系列),我都有相同的确切问题-当我使用 url_for 时,静态文件夹中的文件没有执行应做的事情:

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

我的意思是 .js 不执行任何操作, .css 不会更改元素的样式,图像不会显示在页面上。而且调试器不会显示任何错误。但是,当我使用 url_for 将用户重定向到另一条路由时-效果很好!所以我不知道如何解决这个问题。我使用的是Macbook,所以访问本地文件可能有些问题吗?

P.S。我没有显示任何代码,因为它不是我的代码中的错字。即使我从教师的github复制粘贴代码,我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:1)

url_for的第一个参数是端点名称,而'static'是一个特殊的端点名称,用于引用应用程序的Static Files

  

只需在您的包裹中或您的旁边创建一个名为static的文件夹   模块,它将在应用程序上的/static上可用。

     

要生成静态文件的URL,请使用特殊的“静态”端点   名称:

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

该文件必须以static/style.css的形式存储在文件系统中。

因此,鉴于此:

<link ... href="{{ url_for('static', filename='styles.css') }}"> 

并假设您像这样创建Flask实例:

app = Flask(__name__)

确保您的应用文件/文件夹结构如下:

.
├── app.py
├── static
│   └── styles.css
└── templates
    └── app.html

如果您要像这样组织JS和CSS文件:

.
├── app.py
├── static
│   ├── css
│   │   └── styles.css
│   └── js
│       └── app.js
└── templates
    └── app.html

然后,您必须像这样将参数适当更改为url_for

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

如果将static文件夹命名为其他名称(例如“ assets”),则必须在creating the Flask instance时为static_folder参数指定新名称。

app = Flask(__name__,
            static_folder="assets")

您还可以检查Flask调试器日志,以确保可以正确访问静态文件:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [29/Dec/2019 20:30:44] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [29/Dec/2019 20:30:44] "GET /static/css/styles.css HTTP/1.1" 200 -

或者您的浏览器的调试器/检查工具确实确实在正确下载文件:

enter image description here