Django:如何从Product模型中显示ProductImage

时间:2018-03-11 12:20:45

标签: django django-views

class Product(models.Model):
    company = models.ForeignKey('Company', on_delete=models.SET_NULL, null=True)

class ProductImage(models.Model):
    product = models.ForeignKey('Product', on_delete=models.SET_NULL, null=True)
    image_path = models.ImageField(max_length=255,null=True,blank=True,upload_to='images/%Y/%m/%d')

在我的views.py

class HomeView(ListView):
    template_name = "catalog/product_list.html"
    context_object_name = 'product_list'
    model = Product
product_list.html中的

问题就在这里

{% if product_list %}           
    {% for product in product_list %}
         <!-- the problem is here -->
         if there is an image show 
         <img src="default" />
         else
         <img src="product.ProductImage.image_path here" />
    {% endfor %}
{% endif %}  

问题出在product_list的迭代中 我试过,productImage = product。[productImage或product_image或者是产品图片] .first()但它不起作用

我也试过

{% 
                            img = ''
                            try:
                                productImage = product.productimage_set.first() 
                                img = productImage.image_path
                            except ProductImage.DoesNotExist:   
                                img = ''
                                %}
                                <img class="card-img-top" style="height: 225px; width: 100%; display: block;" src="{{product_image.image_path}}" data-holder-rendered="true">
                                {%
                            %}

但它只输出代码块

我也试过这个

 {% productImage = product.productimage_set.first() %}

但它表示&#39; productImage&#39;,预期&#39;空&#39;或者&#39; endfor&#39;。您是否忘记注册或加载此标记?

2 个答案:

答案 0 :(得分:2)

您需要使用图片的url属性。

{% for product in product_list %}
    {% for product_image in product.productimage_set.all %}
        <image src="{{ product.image_path.url }}" />
    {% endfor %}
{% endfor %}

答案 1 :(得分:0)

如果您只想发布第一张照片,则不需要第二张 for 循环。只需使用:

<image src="{{ product.productimage.all.0.image_path.url }}" />

抱歉,我迟到了 3 年……但以防其他人偶然发现这一点。