Django dev服务器可以正确地为SVG服务吗?

Jas*_*sta 21 python django svg

我正在尝试使用以下服务来提供svg地图:

<object data="map.svg" type="image/svg+xml" width="400" height="300">
    <embed src="map.svg" type="image/svg+xml" width="400" height="300" />
</object>
Run Code Online (Sandbox Code Playgroud)

在Firefox中,这会导致插件提示.如果我重命名地图.svg来映射.xml它正确显示图像.我假设这是因为Django的dev服务器(特别是django.views.static.serve)没有使用正确的mime类型为svg提供服务.这是问题,如果有,是否有补丁?

Lan*_*ney 46

我目前没有Django可用于测试,但看起来静态服务器使用mimetypes库来确定内容类型(特别是guess_type()).

稍微谷歌搜索,我遇到了一些你可能会在settings.py中添加的代码,以添加对svg内容类型的支持:

import mimetypes

mimetypes.add_type("image/svg+xml", ".svg", True)
mimetypes.add_type("image/svg+xml", ".svgz", True)
Run Code Online (Sandbox Code Playgroud)

还有这篇专门针对Pylons的博客文章,但它提到了一个类似的问题.他指定MIME类型存储在"/etc/mime.types"中,并且缺少SVG,因为它不是官方MIME类型.他可能是对的,因为我无法在IANA的任何地方找到SVG的MIME类型.

  • Upvote解决一个奇怪的问题.我有这个问题超过一个星期,django staticfiles似乎在devserver中提供虚假的mimetypes,比如'image/x-png'.添加类似上面的行解决了:mimetypes.add_type("image/png",".png",True) (6认同)

Jar*_*die 6

如果从常规django视图动态提供SVG,则可以在从该视图返回的HTTPResponse对象中指定mimetype .在这种情况下,您需要为开发和生产使用mimetype:

def myview(request):
    svg_data = generate_some_svg_data()
    return HttpResponse(svg_data, mimetype="image/svg+xml")
Run Code Online (Sandbox Code Playgroud)