首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >金字塔静态视图中未提供SVGZ文件

金字塔静态视图中未提供SVGZ文件
EN

Stack Overflow用户
提问于 2015-12-16 01:32:47
回答 1查看 325关注 0票数 1

我一直在我的网站上用SVGZ文件替换SVG图像,但我在让金字塔从static_url中为它们提供服务时遇到了麻烦。

__init.py__具有:

代码语言:javascript
复制
config.add_static_view(name='static', path='app:static', cache_max_age=3600)

并且该模板具有:

代码语言:javascript
复制
<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一无所知,所以我不知道为什么它不能弄清楚如何提供这些文件:

代码语言:javascript
复制
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配置有以下内容,但我怀疑这与金字塔的目的有多大关系。

代码语言:javascript
复制
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上的匹配在某种程度上短路了,附加了正确的网址。

EN

回答 1

Stack Overflow用户

发布于 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本身有问题,还是视图中的其他东西失败了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34295744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档