Как правильно включить спрайт SVG в шаблоны Django - PullRequest
0 голосов
/ 02 марта 2020

Я создал SVG-спрайт и теперь изучаю различные способы его использования в моих Django шаблонах.

Самый простой способ:

  1. Добавить таблицу в папку templates/ (например, templates/svg_spritesheet.svg)
  2. Включить ее в шаблон Django, например Итак: {% include "svg_spritesheet.svg" %}
  3. Призвать данный SVG в коде HTML через: <svg><use xlink:href="#my_svg"></use></svg>

Это сработало для меня. Но у этого метода есть недостатки в работе.

Например: я обычно паркую свои активы c в {{ STATIC_URL }}. Это лучше для целей организации. Во-вторых, я использую кэширование на уровне веб-сервера для ресурсов в {{ STATIC_URL }}. Однако я не использую такое кэширование для своей папки /templates.

Естественно, мне кажется, что было бы лучше, если бы я размещал свои спрайт-листы SVG на {{ STATIC_URL }}. Но как только я это сделаю, как мне включить его в мой Django шаблон?

Ни один из следующих методов не работает:

  1. {% include 'static/svg_spritesheet.svg' %}
  2. {% include '{{ STATIC_URL }}svg_spritesheet.svg' %}
  3. <object type="image/svg+xml" data="{{ STATIC_URL }}svg_spritesheet.svg"></object>
  4. <link type="image/svg+xml" href="{{ STATIC_URL }}svg_spritesheet.svg">

Может ли эксперт привести иллюстративный пример использования спрайт-листов SVG, размещенных в {{ STATIC_URL }} ? Заранее спасибо (в случае гарантии я использую Django 1.8.19 для рассматриваемого проекта).


Примечание: если вы его пропустили - этот вопрос касается листов спрайтов SVG , а не отдельных SVG. Один спрайт-лист содержит несколько SVG-изображений, которые можно выборочно называть (и когда) необходимыми.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Ответ был прямо у меня под носом.

Просто вставьте необходимое место при рендеринге SVG из таблицы спрайтов. Er go:

<svg><use xlink:href="{{ STATIC_URL }}svg_spritesheet.svg#my_image"></use></svg>

Нет необходимости использовать тег include. Таким образом, можно хранить их SVG-спрайты в папке static, так что вся / любая инфраструктура кэширования полностью применяется. Удачного кодирования!

0 голосов
/ 02 марта 2020

Я не уверен, что понял ваш вопрос, но в Django правильный способ загрузки данных c файлов - использование тега stai c.

Ниже я показываю базовый c пример:

шаблон. html

{% load static %}
<img src="{% static "svg_spritesheet.svg" %}" alt="My svg">

Таким образом, Django отвечает за управление URL и обслуживайте svg, используя соответствующее хранилище StaticFilesStorage, которое не вызывается, если вы генерируете URL-адрес вручную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...