使用url_for链接到Flask静态文件


91

如何url_for在Flask中使用引用文件夹中的文件?例如,我的static文件夹中有一些静态文件,其中一些可能位于子文件夹中static/bootstrap

当我尝试从提供文件时static/bootstrap,出现错误。

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

我可以使用此文件来引用不在子文件夹中的文件。

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

引用静态文件的正确方法是什么url_for?如何使用url_for任何级别的静态文件生成URL?

Answers:


181

默认情况下,您具有静态文件的static端点。还Flask应用有以下参数:

static_url_path:可用于为网络上的静态文件指定其他路径。默认为static_folder文件夹的名称。

static_folder:包含应在处提供的静态文件的文件夹static_url_path。默认为应用程序根路径中的“静态”文件夹。

这意味着该filename参数将采用文件的相对路径static_folder,并将其转换为以下相对路径static_url_default

url_for('static', filename='path/to/file')

会将文件路径从static_folder/path/to/file转换为url路径static_url_default/path/to/file

因此,如果要从static/bootstrap文件夹中获取文件,请使用以下代码:

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

将转换为(使用默认设置):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">

另请参阅url_for文档


请注意,初始化时会Flaskstatic端点添加一个url规则,因此更改Flask实例上的这些属性不会更改url_for('static', ...)结果。要更改静态端点初始化后的信息,请参见要点gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Bryce Guinta

1

就我而言,我对nginx配置文件有特殊说明:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

所有客户均收到“ 404”,因为nginx对Flask一无所知。

希望对您有所帮助。


主要配置文件是/etc/nginx/nginx.conf(在Linux上)。在Windows上可能是类似的路径(我不太清楚)
Andrew Grow

这是服务器端配置,如果您只是在桌面上开发应用程序,则可能不需要/不需要它。
adamczi 18/09/19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.