Может Django dev сервер правильно служит 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>

В Firefox это приводит к сменной подсказке. Если я переименовываю map.svg к map.xml, он показывает изображение правильно. Я предполагаю, что это вызвано тем, что dev сервер Django (конкретно django.views.static.serve) не служит svg с корректным типом пантомимы. Действительно ли это - проблема, и если так, является там патчем?

21
задан Jason Christa 22 February 2010 в 18:01
поделиться

2 ответа

Сейчас у меня нет 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)

Есть также сообщение в блоге, относящееся к Pylons, но в нем упоминается похожая проблема. Он указывает, что типы MIME хранятся в "/etc/mime.types" и что SVG отсутствует, потому что это не официальный тип MIME. Возможно, он прав, поскольку я не могу найти MIME-тип для SVG нигде в IANA.

46
ответ дан 29 November 2019 в 06:56
поделиться

Если вы обслуживаете SVG динамически из обычного представления django, вы можете указать тип mimetype в объекте HTTPResponse , из которого вы возвращаете это мнение. В этом случае вам понадобится mimetype как для разработки, так и для производственного использования:

def myview(request):
    svg_data = generate_some_svg_data()
    return HttpResponse(svg_data, mimetype="image/svg+xml")
6
ответ дан 29 November 2019 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: