Может ли сервер Django dev правильно обслуживать SVG? - PullRequest
21 голосов
/ 22 февраля 2010

Я пытаюсь обслуживать карту 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 это приводит к приглашению плагина.Если я переименую карту. svg в карту. xml , она показывает изображение правильно.Я предполагаю, что это потому, что сервер разработчика Django (в частности, django.views.static.serve ) не обслуживает svg с правильным mime-типом.Это проблема, и если да, есть ли патч?

Ответы [ 3 ]

46 голосов
/ 22 февраля 2010

У меня нет Django для тестирования в данный момент, но похоже, что статический сервер использует библиотеку mimetypes для определения типа содержимого (в частности, предположения_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 .

6 голосов
/ 22 февраля 2010

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

def myview(request):
    svg_data = generate_some_svg_data()
    return HttpResponse(svg_data, mimetype="image/svg+xml")
0 голосов
/ 07 декабря 2018

В моем случае эмитентом было развертывание с nginx + gunicorn. Мое изображение в докере nginx служило MIME-типом text / plain для файла .svg. Это расширение mime.types решило проблему:

http {
    include mime.types;
    types {
        image/svg+xml svg;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...