@7a-666

Как вывести картинку в шаблон?

Не очень понимаю как обратится к дочерней модели ProductsImage чтобы забрать от туда картинку

Модели
class Category(models.Model):  # Модель категорий товаров
    name = models.CharField(max_length=30)  # Имя категории
    slug = models.SlugField(max_length=30, unique=True)  # Человеко понятный url

    def get_absolute_url(self):  # Создание персональной ссылки для обекта
        return reverse('category_url', kwargs={'slug': self.slug})

    def __str__(self):
        return self.name


class Product(models.Model):  # Модель товаров
    categories = models.ForeignKey(Category, on_delete=models.CASCADE)  # Связь один ко многим(внешний ключ категории)
    name = models.CharField(max_length=50, verbose_name='Имя товара')  # Имя товара
    slug = models.SlugField(max_length=30, unique=True, verbose_name='URL товара')  # Человеко понятный url
    date = models.DateTimeField(auto_now_add=True, verbose_name='Дата добавления')  # Дата добавления товара
    price = models.IntegerField(max_length=8, verbose_name='Цена')  # Цена товара


class ProductsImage(models.Model):  # Модель картинок товаров
    products = models.ForeignKey(Product, on_delete=models.CASCADE)  # Связь один ко многим(внешний ключ товаров)
    img = models.ImageField(upload_to='products/img/%Y/%m/%d')  # Поле для загрузок картинок товаров


Вюха
def category(request, slug):
    category = Category.objects.get(slug__iexact=slug)  # Текущая категория
    products = Product.objects.all()
    context = {
        'category': category,
        'products': products,
    }
    return render(request, 'catalog/categorys/category.html', context)


Шаблон
{% block content %}
    {% for product in category.product_set.all %}
        <div class="product">
            <div class="title">
                <a href="#">{{ product.name }}</a>
            </div>
        </div>
        <div class="productImg">
            <a href="#">
                <img src="{{MEDIA_URL}}{{ ??? }}" alt="продукт">
            </a>
        </div>
    {% endfor %}
{% endblock %}
  • Вопрос задан
  • 2985 просмотров
Решения вопроса 1
Wondermarin
@Wondermarin
В settings.py:
STATIC_ROOT = BASE_DIR + '/static/'

STATIC_URL = '/static/'

MEDIA_ROOT = BASE_DIR + '/media/'

MEDIA_URL = '/media/'


В urls.py проекта:
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


В models.py:
class ProductsImage(models.Model):  # Модель картинок товаров
    products = models.ForeignKey(Product, related_name='prodimg', on_delete=models.CASCADE)  # Связь один ко многим(внешний ключ товаров)
    img = models.ImageField(upload_to='products/img/%Y/%m/%d')  # Поле для загрузок картинок товаров


В свой шаблон, где вы выводите изображение:
{% block content %}
    {% for product in category.product_set.all %}
        <div class="product">
            <div class="title"
                <a href="#">{{ product.name }}</a>
            </div>
        </div>
        <div class="productImg">
            <a href="#">
                {% for prodimg in product.prodimg.all %}
                    <img src="{{ prodimg.img.url }}" alt="продукт">
                {% endfor %}
            </a>
        </div>
    {% endfor %}
{% endblock %}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы