Использование оригинального размера и соотношения сторон изображения в компоненте карусели в Django CMS
Я использую компонент карусель для Django CMS из списка внешних плагинов.
У меня проблема с размером и соотношением сторон изображения. Я попробовал подход к управлению CSS-файлом в соответствии с этим источником:
Поддерживать соотношение сторон изображения в карусели
Однако это не решает мою проблему. Изображение по-прежнему обрезается и уменьшается, что приводит к низкому разрешению.
Я хочу отображать изображения в полном виде и в их оригинальном соотношении сторон. Однако компонент карусели из плагина позволяет использовать только фиксированные соотношения сторон, которые не соответствуют соотношению сторон моих изображений. Я не нашел возможности использовать или выбрать оригинальное соотношение сторон изображения.
Более того, похоже, что компонент карусели загружает уменьшенную и обрезанную версию изображения.
Если я правильно понял, ответ на загрузку изображения поступает от компонента миниатюр:
djangocms_frontend/contrib/carousel/templates/djangocms_frontend/bootstrap5/carousel/default/image.html
{% load cms_tags easy_thumbnails_tags %}
{% if instance.rel_image %}
{% thumbnail instance.rel_image options.size crop=options.crop upscale=options.upscale subject_location=instance.rel_image.subject_location as thumbnail %}
<img class="d-block w-100" src="{{ thumbnail.url }}" alt="{{ instance.rel_image.default_alt_text|default:'' }}" />
{% else %}
<div class="d-block w-100"
style="aspect-ratio: {{ aspect_ratio }}">
{% for plugin in instance.child_plugin_instances %}
{% render_plugin plugin %}
{% endfor %}
</div>
{% endif %}
Мои вопросы таковы:
- Как отобразить изображение во всю ширину, без обрезки, с отзывчивой высотой в компоненте Django CMS carousel?
ИЛИ
- Как настроить компоненты карусели или миниатюр на загрузку изображений с их оригинальным размером и соотношением сторон?
Спасибо за ценную помощь!
Во-первых, я думаю, что это ошибка: изображения всегда отображаются в разрешении 1024x768, независимо от того, что происходит. Я бы посоветовал вам поднять вопрос здесь: https://github.com/django-cms/djangocms-frontend/issues
Однако существует решение этой проблемы путем предоставления пользовательских шаблонов:
На пути к шаблону скопируйте три файла carousel.html, image.html, slide.html из приложения
djangocms_frontend/contrib/carousel
в папкуdjangocms_frontend/bootstrap5/carousel/default
где-нибудь на пути к шаблону, в идеале - перед оригинальными шаблонами. Теперь вы можете настроить шаблоны. (Если вы не хотите перезаписывать шаблоны для всех каруселей, назовите последнюю папку, скажем,preserve-ar
.)Уберите создание миниатюр, настроив файл image.html:
{% load cms_tags %} {% if instance.rel_image %} <img class="d-block w-100" src="{{ instance.rel_image.url }}" alt="{{ instance.rel_image.default_alt_text|default:'' }}" /> {% else %} <div class="d-block w-100" style="aspect-ratio: {{ aspect_ratio }}"> {% for plugin in instance.child_plugin_instances %} {% render_plugin plugin %} {% endfor %} </div> {% endif %}
В результате каждый слайд будет занимать полную ширину (благодаря классу
w-100
) и высоту в соответствии с их реальным размером. Это приведет к тому, что карусель будет менять свою высоту с каждым изображением, что обычно нежелательно. На этом этапе вы должны были ответить на свой первый вопрос.Если вы хотите зафиксировать высоту всех изображений, вы можете задать ее в шаблоне, например,
<img class="d-block mx-auto" style="height: 50vh; ..."
устанавливает высоту изображения равной 50% от высоты области просмотра. Классmx-auto
добавляет необходимые поля слева и справа. Теперь у вас есть изображения в исходном соотношении сторон с фиксированной высотой - ваш второй вопрос.Если вы решили не переписывать шаблоны по умолчанию, а добавить свои собственные, вам придется сообщить об этом djangocms-frontend, добавив в
settings.py
что-то вроде этого:DJANGOCMS_FRONTEND_CAROUSEL_TEMPLATES = ( ("default", _("Default")), ("preserve-ar", _("Preserve aspect ratio")), )
Это позволит вам выбрать, какой шаблон карусели будет использоваться в плагине карусели.
Надеюсь, это поможет!