Как отобразить изображения из базы данных строка за строкой

Я пытаюсь создать веб-страницу, на которой я отображаю изображения животных в виде галереи. Я бы хотел, чтобы в галерее изображения отображались рядом в ряд (3 изображения в ряд).

Я пробовал отображать изображения из базы данных (модели) бок о бок в строках, но как новичок я нахожу это довольно сложным и хотел бы получить помощь в этом.

Я кодирую с использованием фреймворка Django, где модель (животное) содержит следующие поля: Image_Title, Image_Description, Image_Price.

Я понимаю концепцию, где я должен зациклить объекты Animal, но у меня не получается поместить 3 объекта в ряд. Я могу разместить один в ряд, но это то, что я ищу.

Код для views.py

def gallery(request):
    images = Animal.objects.all()
    context = {
        'images': images,
    }
    return render(request, 'AnimalGallery/gallery.html', context)

Код для модели животного:

class Animal(models.Model):
    Image = models.ImageField()
    Image_Title = models.CharField(max_length=50)
    Image_Description = models.CharField(max_length=500, blank=True)
    Image_Price = models.FloatField(null=True)

    def __str__(self):
        return self.Image_Title

Код для HTML (отображает одно изображение в строке):

<table>
    {% for each in images %}
        <tr>
             <td>{{each.Image}} </td>
             <td>{{each.Image_Title}} </td>
        </tr>
    {% endfor %}
</table>

Это веб-сайт, который реализовал ту же концепцию, которую я ищу (3 изображения в строке)

Изображения не включаются непосредственно в HTML, вместо этого передается url изображения для получения и отображения на стороне клиента.

Проблема в том, что вы пытаетесь передать изображение непосредственно в шаблон, вместо этого вам нужно использовать img с путем изображения.

<td><img src="{{ each.Image.url }}"> </td>

Это при условии, что у вас правильно настроены статические файлы. О правильной настройке статических файлов см. здесь: https://docs.djangoproject.com/en/4.1/howto/static-files/

Для адресации 3 изображений в строке вам понадобится немного https://docs.djangoproject.com/en/dev/ref/templates/builtins/

<table>
{% for image in images %}
    {% if forloop.counter0|divisibleby:"3" %}
        <tr>
    {% endif %}
         <td>{{image}}</td>
    {% if forloop.counter|divisibleby:"3" %}
        </tr>
    {% endif %}
    {% if forloop.last and not forloop.counter|divisibleby:"3" %}
        </tr>
    {% endif %}
{% endfor %}

Используя forloop.counter и forloop.counter0, можно получить счетчик итераций, а передача этого числа в divisibleby позволяет определить, когда начинать и заканчивать новую строку. Последний бит проверяет, нужно ли закрывать тег строки таблицы.

Вернуться на верх