Spec-Zone.ru › Wagtail 3

Как использовать изображения в шаблонах

Тег 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" />

Альтернативные HTML-теги

Ключевое слово as позволяет использовать альтернативные HTML-теги изображений (такие как <picture> или <amp-img>). Например, чтобы использовать тег <picture>:

<picture>
    {% image page.photo width-800 as wide_photo %}
    <source srcset="{{ wide_photo.url }}" media="(min-width: 800px)">
    {% image page.photo width-400 %}
</picture>

И чтобы использовать тег <amp-img> (на основе примера с горами из документации AMP):

{% image image width-550 format-webp as webp_image %}
{% image image width-550 format-jpeg as jpeg_image %}

<amp-img alt="{{ image.alt }}"
    width="{{ webp_image.width }}"
    height="{{ webp_image.height }}"
    src="{{ webp_image.url }}">
    <amp-img alt="{{ image.alt }}"
        fallback
        width="{{ jpeg_image.width }}"
        height="{{ jpeg_image.height }}"
        src="{{ jpeg_image.url }}"></amp-img>
</amp-img>

Изображения, вставленные в 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API