Python 使用Flask处理css文件中的URL

Python 使用Flask处理css文件中的URL,python,flask,Python,Flask,我目前正在硬编码css文件中的所有URL。这是其中的一行 .logo { background: url(**../imgs/logo.png**) no-repeat 0 10px; width: 169px; height: 40px; } 我的html文件中的所有其他url都是通过Flask的url_提供的。我试图将此应用于我的css文件,但它不会工作。我假设这是因为css文件是在html文件从浏览器请求时获取的 那么有没有一种方法可以通过Flask处理css中的URL呢?如果有,我

我目前正在硬编码css文件中的所有URL。这是其中的一行

.logo { background: url(**../imgs/logo.png**) no-repeat  0 10px; width: 169px; height: 40px;  }
我的html文件中的所有其他url都是通过Flask的url_提供的。我试图将此应用于我的css文件,但它不会工作。我假设这是因为css文件是在html文件从浏览器请求时获取的

那么有没有一种方法可以通过Flask处理css中的URL呢?如果有,我应该吗

以防万一,我的目录结构大致是

static/
    css/
    fonts/
    imgs/
    js/
templates/
uploads/
app.py and models.py and git, db, procfile etc...

不,没有,这是有原因的。CSS文件及其类似文件(JS、img等)用作静态文件。事实上,您应该从CDN或至少从nginx(它会缓存头、压缩等)为它们提供服务

正确的方法:将nginx静态url直接指向静态文件夹。将CSS、HTML中的所有URL更改为指向
/static/CSS/,/static/js/
。。。等等这将使它们基于URL而不是基于文件。最后,将服务器代理到较高端口上运行的Flask。 (当我靠近电脑时,我会在上面发布配置,但你可以在网上找到很多)


不推荐的方法:提供一个动态URL,例如/
assets/
,然后加载该文件,通过Jinja或您正在使用的任何模板解析器传递它。通过这种方式,您可以使用模板标记获取完整的URL,但我不推荐使用这种方式。

不,没有,这是有原因的。CSS文件及其类似文件(JS、img等)用作静态文件。事实上,您应该从CDN或至少从nginx(它会缓存头、压缩等)为它们提供服务

正确的方法:将nginx静态url直接指向静态文件夹。将CSS、HTML中的所有URL更改为指向
/static/CSS/,/static/js/
。。。等等这将使它们基于URL而不是基于文件。最后,将服务器代理到较高端口上运行的Flask。 (当我靠近电脑时,我会在上面发布配置,但你可以在网上找到很多)


不推荐的方法:提供一个动态URL,例如/
assets/
,然后加载该文件,通过Jinja或您正在使用的任何模板解析器传递它。通过这种方式,您可以使用模板标记获取完整的URL,但我不建议这样做。

CSS文件引用的文件是相对于CSS文件获取的。你可以(而且我认为应该)以你目前的方式引用它们。如果更改静态资产的URL前缀,则使用绝对URL会中断。CSS文件引用的文件是相对于CSS文件获取的。你可以(而且我认为应该)以你目前的方式引用它们。如果更改静态资产的URL前缀,则使用绝对URL会中断。