我用SVGZ文件替换了我网站上的SVG图像,但是我无法让Pyramid从static_url中为它们提供服务。
__init.py__
有:
config.add_static_view(name='static', path='app:static', cache_max_age=3600)
,模板有:
<img src="{{ 'app:static/img/file.svgz'|static_url }}" />
当文件名以.svg
结尾时,Pyramid会提供文件,但是当我用.svgz
替换它时(是的,SVGZ文件与SVG文件具有相同的权限在同一目录中) ,金字塔不响应URL,nginx报告404(因为就{nginx而言,文件不在/app/static/img/file.svgz
)。
我有一种感觉,这是因为Pyramid不知道如何为SVGZ设置Content-Type / Content-Encoding,所以它将它交还给nginx,类似于关于web字体的这个问题: Web fonts always return 404 from static path。遗憾的是,该帖子中没有答案,所以我希望有人知道如何配置Pyramid以静态提供SVGZ(以及其他不太常见的类型)。
其他类似的问题(How to set the content type header in response for a particular file type in Pyramid web framework)提到Pyramid使用mimetypes
库来计算文件类型信息,但是这个库似乎是grok svgz,所以我不知道为什么它可以& #39;弄清楚如何提供这些文件:
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
>>> import mimetypes
>>> mimetypes.guess_type('file.svgz')
('image/svg+xml', 'gzip')
FWIW,我的Nginx配置有以下内容,但我怀疑这与Pyramid的内容有很大关系。
location ~ \.svgz$ {
add_header Content-Encoding gzip;
}
编辑:我认为Nginx的错误配置造成了问题,与Pyramid没有任何关系。我使用的代理设置与金字塔食谱(http://docs.pylonsproject.org/projects/pyramid-cookbook/en/latest/deployment/nginx.html)中的内容完全相同,包括步骤3中显示的静态配置,其中指出:&#34;它有点奇怪的是,root并没有指向静态目录,但是它起作用,因为Nginx会将实际的URL附加到指定的路径。&#34;
在我看来,上面列出的location ~ \.svgz$
指令和Pyramid应用程序的静态配置之间存在一些冲突。当我删除它时,Nginx从我的Pyramid静态路径提供SVGZ文件,但它无法设置正确的内容编码,因此它不会在浏览器中加载。当我重新添加指令时,Nginx会报告404.就像.svgz上的匹配以某种方式短路附加正确的URL一样。
答案 0 :(得分:0)
1)启动连接到终端的WSGI服务器
2)在这里添加一个打印https://github.com/Pylons/pyramid/blob/master/pyramid/response.py#L57(因为它肯定是使用mimetypes,如前所述)
3)运行下载视图以查看其打印内容。您应该看看mimetypes本身是否存在问题,或者该视图中是否存在其他问题。