Как использовать изображения в шаблонах
Тег image вставляет совместимый с XHTML элемент img на страницу, устанавливая его src, width, height и alt. См. также Больше контроля над тегом img.
Синтаксис тега таков:
{% image [image] [resize-rule] %}
И изображение, и правило изменения размера должны быть переданы в тег шаблона.
Например:
{% load wagtailimages_tags %}
...
<!-- Display the image scaled to a width of 400 pixels: -->
{% image page.photo width-400 %}
<!-- Display it again, but this time as a square thumbnail: -->
{% image page.photo fill-80x80 %}
В приведенном выше примере синтаксиса [image] — это объект Django, относящийся к изображению. Если в вашей модели страницы определено поле с именем «photo», то [image], вероятно, будет page.photo. [resize-rule] определяет, как изображение будет изменён по размеру при вставке на страницу. Поддерживаются различные методы изменения размера, чтобы удовлетворить различные случаи использования (например, изображения в заголовках, занимающие всю ширину страницы, или миниатюры, которые обрезаются до фиксированного размера).
Обратите внимание, что пробел разделяет [image] и [resize-rule], но правило изменения размера не должно содержать пробелов. Ширина всегда указывается перед высотой. Изменённые по размеру изображения будут сохранять исходное соотношение сторон, если не используется правило fill, что может привести к обрезке некоторых пикселей.
Доступные методы изменения размера:
Примечание
Wagtail не позволяет изменять форму или растягивать изображения. Соотношения размеров изображений всегда сохраняются. Wagtail также не поддерживает масштабирование вверх. Небольшие изображения, которые должны отображаться в большем размере, будут «максимизированы» до своих исходных размеров.
Больше контроля над тегом img
Wagtail предоставляет два сокращения для предоставления большего контроля над элементом img:
1. Добавление атрибутов к тегу {% image %}
Дополнительные атрибуты могут быть указаны с синтаксисом attribute="value":
{% image page.photo width-400 class="foo" id="bar" %}
Вы можете установить более подходящий атрибут alt таким образом, переопределяя тот, который автоматически генерируется из названия изображения. Атрибуты src, width, и height также можно переопределить, если необходимо.
2. Генерирование изображения «как foo» для доступа к отдельным свойствам
Wagtail может назначить данные изображения другой переменной, используя синтаксис Django as:
{% image page.photo width-400 as tmp_photo %}
<img src="{{ tmp_photo.url }}" width="{{ tmp_photo.width }}"
height="{{ tmp_photo.height }}" alt="{{ tmp_photo.alt }}" class="my-custom-class" />
Примечание
Свойство изображения, используемое для атрибута src, — это image.url, а не image.src.
Этот синтаксис предоставляет разработчику доступ к базовому отображению изображения (tmp_photo). «Отображение» содержит информацию, специфичную для способа форматирования изображения с использованием правила изменения размера, т. е. размеры и URL-адрес источника. Доступны следующие свойства:
Если на вашем сайте определена пользовательская модель изображения с помощью AbstractImage, любые дополнительные поля, которые вы добавите к изображению (например, правообладателя), не будут включены в отображение.
Следовательно, если вы добавили поле author в свой AbstractImage в приведенном выше примере, вы можете получить к нему доступ, используя {{ page.photo.author }}, а не {{ tmp_photo.author }}.
(Из-за связей в базе данных между отображениями и их родительским изображением вы можете получить к нему доступ как {{ tmp_photo.image.author }}, но это снижает читабельность.)
Сокращение attrs
Вы также можете использовать свойство attrs в качестве сокращения для вывода атрибутов src, width, height и alt в одном месте:
<img {{ tmp_photo.attrs }} class="my-custom-class" />
Изображения, вставленные в rich text
Указанная выше информация относится к изображениям, определённым через поля, специфичные для изображений, в вашей модели. Однако изображения также могут быть произвольно вставлены в поля Rich Text редактором страницы (см. Rich Text (HTML)).
Изображения, вставленные в поля Rich Text, не могут быть легко контролированы разработчиком шаблона. Нет объектов изображений, с которыми можно было бы работать, поэтому тег шаблона {% image %} использовать нельзя. Вместо этого редакторы могут выбрать один из ряда «форматов» изображений в момент вставки изображений в текст.
Wagtail поставляется с тремя предопределёнными форматами изображений, но разработчик может определить больше форматов на Python. Эти форматы:
Примечание
CSS-классы, добавляемые к изображениям, не поставляются с соответствующими таблицами стилей или встроенными стилями. Например, класс left ничего не сделает по умолчанию. Разработчик должен добавить эти классы в свои файлы CSS для фронтенда, чтобы точно определить, что должны значить left, right или full-width.
Дополнительную информацию о форматах изображений, включая создание собственных, см. в Форматы изображений в редакторе Rich Text
Формат вывода изображения
Wagtail может автоматически изменять формат некоторых изображений при изменении их размера:
- Изображения PNG и JPEG не меняют формат.
- GIF-изображения без анимации преобразуются в PNG.
- Изображения BMP преобразуются в PNG.
- Изображения WebP преобразуются в PNG.
Также можно переопределить формат вывода для каждого тега, используя фильтр format после правила изменения размера.
Например, чтобы всегда преобразовать изображение в JPEG, используйте format-jpeg:
{% image page.photo width-400 format-jpeg %}
Вы также можете использовать format-png или format-gif.
Беспотерье WebP
Вы можете закодировать изображение в формате бес потерь WebP, используя фильтр format-webp-lossless:
{% image page.photo width-400 format-webp-lossless %}
Цвет фона
Форматы изображений PNG и GIF поддерживают прозрачность, но если вы хотите преобразовать изображения в формат JPEG, прозрачность необходимо заменить твёрдым цветом фона.
По умолчанию Wagtail установит фон в белый цвет. Но если белый фон не подходит вашему дизайну, вы можете указать цвет с помощью фильтра bgcolor.
Этот фильтр принимает один аргумент, который представляет собой 3- или 6-значный шестнадцатеричный код CSS, представляющий цвет, который вы хотите использовать:
{# Sets the image background to black #}
{% image page.photo width-400 bgcolor-000 format-jpeg %}
Качество изображения
Настройки качества изображения JPEG и WebP Wagtail по умолчанию установлены на 85 (что довольно высоко). Это можно изменить глобально или на основе каждого тега.
Глобальное изменение
Используйте настройки WAGTAILIMAGES_JPEG_QUALITY и WAGTAILIMAGES_WEBP_QUALITY для изменения глобальных значений качества JPEG и WebP:
# settings.py # Make low-quality but small images WAGTAILIMAGES_JPEG_QUALITY = 40 WAGTAILIMAGES_WEBP_QUALITY = 45
Обратите внимание, что это не повлияет на ранее сгенерированные изображения, поэтому вам может потребоваться удалить все отображения, чтобы они могли быть перегенерированы с новой настройкой. Это можно сделать из оболочки Django:
# Replace this with your custom rendition model if you use one >>> from wagtail.images.models import Rendition >>> Rendition.objects.all().delete()
Вы также можете напрямую использовать команду управления изображениями из консоли для перегенерации отображений:
$ ./manage.py wagtail_update_image_renditions --purge
Дополнительную информацию об этой команде см. в wagtail_update_image_renditions
Изменение по тегам
Также можно задать разные качества JPEG и WebP для отдельных тегов, используя фильтры jpegquality и webpquality. Это всегда будет переопределять значение по умолчанию:
{% image page.photo_jpeg width-400 jpegquality-40 %}
{% image page.photo_webp width-400 webpquality-50 %}
Обратите внимание, что это не повлияет на файлы PNG или GIF. Если вы хотите, чтобы все изображения имели низкое качество, вы можете использовать этот фильтр с format-jpeg или format-webp (что принудительно устанавливает вывод всех изображений в формате JPEG или WebP):
{% image page.photo width-400 format-jpeg jpegquality-40 %}
{% image page.photo width-400 format-webp webpquality-50 %}
Генерация отображений изображений в Python
Все упомянутые выше преобразования изображений также можно использовать непосредственно в коде Python. См. Генерация отображений в Python.
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v3.0.3/topics/images.html