Spec-Zone.ru › Wagtail 2

Динамический просмотр изображения

В большинстве случаев разработчики, желающие генерировать изображения в Python, должны использовать метод get_rendition(). См. Генерация изображений в Python.

Если вам нужно создавать версии изображений для внешней системы, такой как блог или мобильное приложение, Wagtail предоставляет представление для динамической генерации изображений, вызывая уникальный URL.

Представление принимает идентификатор изображения, спецификацию фильтра и подпись безопасности в URL. Если эти параметры действительны, оно отображает файл изображения, соответствующий этим критериям.

Как и тег {% image %}, изображение генерируется при первом обращении, а последующие обращения выполняются из кэша.

Настройка

Добавьте запись для представления в вашу конфигурацию URL:

from wagtail.images.views.serve import ServeView

urlpatterns = [
    ...

    re_path(r'^images/([^/]*)/(\d*)/([^/]*)/[^/]*$', ServeView.as_view(), name='wagtailimages_serve'),

    ...

    # Ensure that the wagtailimages_serve line appears above the default Wagtail page serving route
    re_path(r'', include(wagtail_urls)),
]

Использование

Интерфейс генератора URL изображений

При включенном динамическом представлении для просмотра изображений автоматически становится доступным генератор URL изображений в интерфейсе администратора. К нему можно получить доступ через страницу редактирования любого изображения, нажав кнопку «Генератор URL» справа.

Этот интерфейс позволяет редакторам генерировать URL-адреса обрезанных версий изображения.

Генерация динамических URL изображений в Python

Динамические URL изображений также можно генерировать с помощью кода Python и передавать клиенту через API или использовать непосредственно в шаблоне.

Одно из преимуществ использования динамических URL изображений в шаблоне заключается в том, что они не блокируют начальный ответ во время рендеринга, как это делает тег {% image %}.

Функция generate_image_url в wagtail.images.views.serve является удобным методом для генерации динамического URL изображения.

Вот пример использования этого в представлении:

def display_image(request, image_id):
    image = get_object_or_404(Image, id=image_id)

    return render(request, 'display_image.html', {
        'image_url': generate_image_url(image, 'fill-100x100')
    })

Операции с изображениями можно объединять, соединяя их символом |:

return render(request, 'display_image.html', {
    'image_url': generate_image_url(image, 'fill-100x100|jpegquality-40')
})

В ваших шаблонах:

{% load wagtailimages_tags %}
...

<!-- Get the url for the image scaled to a width of 400 pixels: -->
{% image_url page.photo "width-400" %}

<!-- Again, but this time as a square thumbnail: -->
{% image_url page.photo "fill-100x100|jpegquality-40" %}

<!-- This time using our custom image serve view: -->
{% image_url page.photo "width-400" "mycustomview_serve" %}

Вы можете передать необязательное имя представления, которое будет использоваться для отображения изображения. По умолчанию это wagtailimages_serve

Расширенная настройка

Настройка представления для перенаправления вместо отображения

По умолчанию представление отображает файл изображения непосредственно. Это поведение можно изменить на переадресацию 301, что может быть полезно, если вы размещаете свои изображения на внешнем сервере.

Для этого передайте action='redirect' в метод ServeView.as_view() в вашей конфигурации URL:

from wagtail.images.views.serve import ServeView

urlpatterns = [
    ...

    re_path(r'^images/([^/]*)/(\d*)/([^/]*)/[^/]*$', ServeView.as_view(action='redirect'), name='wagtailimages_serve'),
]

Интеграция с django-sendfile

django-sendfile переносит задачу передачи данных изображения на веб-сервер вместо непосредственного отображения его из приложения Django. Это может значительно снизить нагрузку на сервер в ситуациях, когда на вашем сайте загружается много изображений, но вы не можете использовать Кэширующий прокси или CDN.

Сначала необходимо установить и настроить django-sendfile, а также настроить ваш веб-сервер для его использования. Если вы еще не сделали этого, обратитесь к документации по установке.

Для отображения изображений с django-sendfile можно использовать класс SendFileView. Это представление можно использовать «из коробки»:

from wagtail.images.views.serve import SendFileView

urlpatterns = [
    ...

    re_path(r'^images/([^/]*)/(\d*)/([^/]*)/[^/]*$', SendFileView.as_view(), name='wagtailimages_serve'),
]

Вы можете настроить его, чтобы переопределить бэкенд, определённый в настройке SENDFILE_BACKEND:

from wagtail.images.views.serve import SendFileView
from project.sendfile_backends import MyCustomBackend

class MySendFileView(SendFileView):
    backend = MyCustomBackend

Вы также можете настроить его для отображения частных файлов. Например, если необходимо только аутентифицироваться (например, для Django >= 1.9):

from django.contrib.auth.mixins import LoginRequiredMixin
from wagtail.images.views.serve import SendFileView

class PrivateSendFileView(LoginRequiredMixin, SendFileView):
    raise_exception = True
  • Предыдущая Обнаружение особенностей
  • Следующая Фокусные точки

Содержание страницы

  • Динамический просмотр изображения
    • Настройка
    • Использование
      • Интерфейс генератора URL изображений
      • Генерация динамических URL изображений в Python
    • Расширенная настройка
      • Настройка представления для перенаправления вместо отображения
      • Интеграция с django-sendfile

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v2.16.3/advanced_topics/images/image_serve_view.html

Spec-Zone.ru

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