我一直在我的网站上用SVGZ文件替换SVG图像,但我在让金字塔从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结尾时将提供该文件,但是当我将其替换为.svgz时(是的,SVGZ文件与SVG文件位于相同的目录中,具有与.svg文件相同的权限),Pyramid不响应该URL,并且nginx报告404 (因为就nginx而言,该文件不在/app/static/img/file.svgz中)。
我有一种感觉,这是因为金字塔不知道如何设置SVGZ的内容类型/内容编码,所以它把它交给了nginx,类似于这个关于网络字体的问题:Web fonts always return 404 from static path。不幸的是,在那篇文章中没有答案,所以我希望有人知道如何配置金字塔来静态地提供SVGZ (和其他不常用的类型)。
其他类似的问题(How to set the content type header in response for a particular file type in Pyramid web framework)提到,Pyramid使用mimetypes库来确定文件类型信息,但该库似乎对svgz一无所知,所以我不知道为什么它不能弄清楚如何提供这些文件:
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配置有以下内容,但我怀疑这与金字塔的目的有多大关系。
location ~ \.svgz$ {
add_header Content-Encoding gzip;
}编辑:我认为是Nginx的错误配置导致了这个问题,与金字塔无关。我使用的代理设置与金字塔食谱(http://docs.pylonsproject.org/projects/pyramid-cookbook/en/latest/deployment/nginx.html)中的设置相同,包括步骤3中所示的静态配置:“根目录没有指向静态目录,这有点奇怪,但它是有效的,因为Nginx会将实际的URL附加到指定的路径。”
在我看来,上面列出的location ~ \.svgz$指令与金字塔应用程序的静态配置之间似乎存在一些冲突。当我删除它时,Nginx从我的金字塔静态路径提供SVGZ文件,但它没有设置正确的内容编码,所以它不会加载到浏览器中。当我重新添加指令时,Nginx报告404。这就好像.svgz上的匹配在某种程度上短路了,附加了正确的网址。
发布于 2015-12-22 15:18:20
1)启动连接到终端的WSGI服务器
2)在这里添加一个print https://github.com/Pylons/pyramid/blob/master/pyramid/response.py#L57 (因为它确实使用了mimetypes,如前所述)
3)运行download view查看它打印的内容。你应该看看是mimetypes本身有问题,还是视图中的其他东西失败了。
https://stackoverflow.com/questions/34295744
复制相似问题