我通过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复制粘贴代码,我仍然遇到同样的问题。
答案 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 -
或者您的浏览器的调试器/检查工具确实确实在正确下载文件: