使用 url_for 链接到 Flask 静态文件

Posted

技术标签:

【中文标题】使用 url_for 链接到 Flask 静态文件【英文标题】:Link to Flask static files with url_for 【发布时间】:2013-04-27 10:32:00 【问题描述】:

如何在 Flask 中使用url_for 来引用文件夹中的文件?比如我在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?

【问题讨论】:

【参考方案1】:

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

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

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

Linux 上的主要配置文件是/etc/nginx/nginx.conf。在 Windows 上可能类似。

【讨论】:

【参考方案2】:

默认情况下,static endpoint 用于静态文件。 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 documentation。

【讨论】:

以上是关于使用 url_for 链接到 Flask 静态文件的主要内容,如果未能解决你的问题,请参考以下文章

如何把css,js文件发布到服务器上flask

jinjia2 flask加载静态文件

Flask从入门到精通之静态文件

flask-前台布局页面搭建3

使用 url_for() 在 Flask 中创建动态 URL

Flask之加载静态资源