Как получить url-атрибут изображения в django

У меня проблема с получением url изображения в шаблоне django. В файле views я получаю "product__stock_keeping_unit__image", который является изображением сопутствующих товаров, как показано ниже.

data = models.Product.objects.filter(category__slug=slug, product__is_default=True).values("id", "name", "product__sku", "slug", "category__name", "product__store_price", "product__sub_product__units", "product__stock_keeping_unit__image")

В файле шаблона я пытаюсь отобразить изображение

{% for item in data %}
        <div class="col-lg-3 mb-4 text-center">
            <div class="product-entry border">
                <a href="#" class="prod-img">
                    <img src="{{ item.product__stock_keeping_unit__image.url }}">
                </a>
                <div class="desc">
                    <h2><a href="{% url 'product_detail' item.slug item.product__sku %}">{{ item.name }}</a></h2>
                    <span class="price">${{ item.product__store_price }}</span>
                </div>
            </div>
        </div>
       {% endfor %}

Все работает нормально, кроме поля img. В источнике страницы я получаю пустую строку. Но когда я пишу <img src="{{ item.product__stock_keeping_unit__image }}"> я получаю путь к изображению в источнике страницы images/men-shoes.jpg но не добавляю MEDIA_URL /media/images/men-shoes.jpg в путь.

Settings.py

MEDIA_ROOT =  os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Как я могу решить эту проблему. Заранее спасибо!

Вы должны добавить медиа префикс следующим образом:

src="{% get_media_prefix %}{{ item.product__stock_keeping_unit__image }}">

и установите некоторые настройки url для режима разработки, например, так:

# urls.py

..
urlpatterns = [
   ...
]

# Serving the media files in development mode
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    urlpatterns += staticfiles_urlpatterns()

.values(...) возвращает кверисет, содержащий словарь, см. здесь. Поэтому вы не сможете получить доступ к свойству url поля image.

Используйте стандартный объект django, который раскрывает свойство поля image. Вы можете использовать следующее:

Запрос:

data = models.Product.objects.filter(category__slug=slug, product__is_default=True)

В шаблоне

<img src="{{ item.product.tock_keeping_unit.image.url }}">

p.s. вы можете использовать select_related для повышения производительности

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