Улучшение системы работы с фото: добавлена команда очистки битых записей и оптимизация обработки изображений

This commit is contained in:
2026-01-06 09:25:37 +03:00
parent 0f19542ac9
commit 288716deba
14 changed files with 535 additions and 122 deletions

View File

@@ -258,11 +258,11 @@
<div class="card-body">
<div class="row g-3 catalog-list" id="catalog-grid">
{% for item in items %}
<div class="col-12 catalog-item" data-type="{{ item.item_type }}" data-category-ids="{% for cat in item.categories.all %}{{ cat.pk }}{% if not forloop.last %},{% endif %}{% endfor %}">
<div class="col-12 catalog-item" data-type="{{ item.item_type }}" data-category-ids="{% for cat in item.cached_categories %}{{ cat.pk }}{% if not forloop.last %},{% endif %}{% endfor %}">
<div class="card h-100 shadow-sm border-0">
<div class="position-relative">
{% if item.main_photo %}
<img src="{{ item.main_photo.image.url }}" class="card-img-top" alt="{{ item.name }}" style="height: 120px; object-fit: cover;">
{% if item.cached_main_photo %}
<img src="{{ item.cached_main_photo.get_thumbnail_url }}" class="card-img-top" alt="{{ item.name }}" style="height: 120px; object-fit: cover;">
{% else %}
<div class="bg-light d-flex align-items-center justify-content-center" style="height: 120px;">
<i class="bi bi-image text-muted fs-2"></i>
@@ -359,6 +359,54 @@
</div>
{% endfor %}
</div>
<!-- Пагинация -->
{% if is_paginated %}
<nav aria-label="Пагинация" class="mt-4">
<ul class="pagination justify-content-center mb-0">
{% if page_obj.has_previous %}
<li class="page-item">
<a class="page-link" href="?page=1">&laquo; Первая</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}">&lsaquo; Назад</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link">&laquo; Первая</span>
</li>
<li class="page-item disabled">
<span class="page-link">&lsaquo; Назад</span>
</li>
{% endif %}
<li class="page-item active">
<span class="page-link">
Страница {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}
</span>
</li>
{% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">Вперед &rsaquo;</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.paginator.num_pages }}">Последняя &raquo;</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link">Вперед &rsaquo;</span>
</li>
<li class="page-item disabled">
<span class="page-link">Последняя &raquo;</span>
</li>
{% endif %}
</ul>
<div class="text-center text-muted small mt-2">
Показано {{ page_obj.start_index }}{{ page_obj.end_index }} из {{ page_obj.paginator.count }} товаров
</div>
</nav>
{% endif %}
</div>
</div>
</div>

View File

@@ -47,7 +47,7 @@
style="max-width: 100%; max-height: 100%; object-fit: contain;">
</div>
<div class="card-body p-2 text-center">
{% if photo.order == 0 %}
{% if photo.is_main %}
<div class="badge bg-success w-100">⭐ Главное (позиция 1)</div>
{% else %}
<small class="text-muted">Позиция: {{ photo.order|add:1 }}</small>
@@ -121,7 +121,7 @@
<div class="modal-footer py-2 flex-wrap">
<div id="galleryQualityStatus" class="me-auto d-flex align-items-center gap-2">
<!-- Индикатор качества текущего фото в галерее -->
<span id="mainBadge" {% if not product_photos.0.order == 0 %}style="display: none;"{% endif %} class="badge bg-success">⭐ Главное</span>
<span id="mainBadge" {% if not product_photos.0.is_main %}style="display: none;"{% endif %} class="badge bg-success">⭐ Главное</span>
</div>
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Закрыть</button>
</div>