Как добавить несколько фотографий на одну страницу сайта с помощью django?
Я пишу django проект для интернет магазина. На странице с описанием товара у меня есть несколько фотографий для этого товара и я не могу добавить их в шаблон. Я использую 2 модели с отношением Many to many - для товара и для фотографий, и добавил их в template.html. Но я не вижу ни одной фотографии на странице. Мой код выглядит следующим образом:
models.py:
class ProductPhoto(models.Model):
def get_file_name(self, filename: str) -> str:
ext_file = filename.strip().split('.')[-1]
new_filename = f'{uuid.uuid4()}.{ext_file}'
return os.path.join('product_photo/', new_filename)
# product = models.ForeignKey(Product, on_delete=models.CASCADE)
photo = models.ImageField(upload_to=get_file_name)
description = models.CharField(max_length=20, blank=True)
def __str__(self):
return f'{self.description}'
class Product(models.Model):
slug = models.SlugField(max_length=200, db_index=True)
title = models.CharField(unique=True, max_length=100, db_index=True)
description_short = models.CharField(max_length=200)
description = models.CharField(max_length=500)
color = models.CharField(max_length=20)
price = models.DecimalField(max_digits=8, decimal_places=2)
sale = models.SmallIntegerField(max_length=2, blank=True)
new_arrival = models.BooleanField(default=True)
is_visible = models.BooleanField(default=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
photo = models.ManyToManyField(ProductPhoto)
def __str__(self):
return f'{self.title}'
class Meta:
index_together = (('id', 'slug'), )
def get_absolute_url(self):
return reverse("shop:products", args=[self.id, self.slug])
views.py:
def product_details(request, id, slug):
product = get_object_or_404(Product, id=id, slug=slug, is_visible=True)
cart = Cart(request)
return render(request,
'single-product.html',
{'product': product,
'cart': cart,
})
template.html:
<div class="product-details-left">
<div class="product-details-images">
{% for item in product.photo.all %}
<div class="lg-image">
<img src="{{ item }}" alt="">
<a href="{{ item }}" class="popup-img venobox" data-gall="myGallery"><i class="fa fa-expand"></i></a>
</div>
{% endfor %}
</div>
<div class="product-details-thumbs">
{% for item in product.photo.all %}
<div class="sm-image"><img src="{{ item }}" alt="product image thumb"></div>
{% endfor %}
</div>
</div>
Если я добавляю "print(product.photo)" к "def product_details" в терминале, я вижу: Not Found: /shop/2/nabir-dlya-vannoyi-vislanda-3od-asort/набір для ванної 2, где "/shop/2/nabir-dlya-vannoyi-vislanda-3od-asort" - absolute_url, а "набір для ванної 2" - описание, добавленное к фото.
Я думаю, что это из-за пути к фотографии в "def get_file_name", но я могу ошибаться.
Кто знает, как добавить фотографии в html шаблон в этом случае?