Как получить 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 для повышения производительности