首页 > 解决方案 > 如何使模板中的python只输入一次if条件

问题描述

我有一些产品和一些不同型号的图片。在显示所有产品时,我需要在表格中显示 1 张图片。我试过这个:

模板 :

{% for instance in instances %}
    <tr class="check_items_row">
        <td style="width:20px;">
           <div class="checkbox lgi-checkbox m-t-5">
              <label>
                  <input class="check check_item" type="checkbox" value="{{instance.pk}}" name="delete_item">
                  <i class="input-helper"></i>
              </label>
          </div>
        </td>
        <td><a href="{% url 'products:product' pk=instance.pk %}">{{instance.auto_id}}</a></td>
        <td>{{instance.category}}</td>
        <td>{{instance.subcategory}}</td>
        <td>{{instance.name}}</td>
        {% for item in product_gallery %}
            {% if item.product == instance and test == 0 %}
                <td><img src="{{item.image.url}}" alt="Image" style="width:100px;"/></td>
             {% endif %}
        {% endfor %}
    </tr>
{% endfor %} 

视图.py

def products(request):
    instances = Product.objects.filter(is_deleted=False).order_by('auto_id')
    product_gallery = ProductGallery.objects.all()
    context = {
        'title': "Product ",
        'instances' : instances,
        "product_gallery": product_gallery,
        "test": 0,
    }
    return render(request,'products/products.html',context)

在我的想法中,我只需要更改模板中 test 的值,如果它进入if 条件一次

此代码显示产品的所有图像。 我只需要每个产品的一张图片。

在这里,我需要更改条件内的值并在循环if后重置为 0for

楷模:

class Product(BaseModel):
    category = models.ForeignKey('products.ProductCategory',on_delete=models.CASCADE)
    subcategory = models.ForeignKey('products.ProductSubCategory',on_delete=models.CASCADE)
    name = models.CharField(max_length=255)

    class Meta:
        db_table = 'products_product'
        verbose_name = _('product')
        verbose_name_plural = _('products')
        ordering = ('name',)

    def __str__(self):
            return self.name


class ProductGallery(models.Model):
    product = models.ForeignKey('products.Product',on_delete=models.CASCADE)
    image = models.FileField(upload_to='products/product_gallery/')

    class Meta:
        db_table = 'products_product_gallery'
        verbose_name = _('product_gallery')
        verbose_name_plural = _('product_gallerys')

    def __unicode__(self):
        return(self.product)

标签: pythondjangotemplates

解决方案


def get_image_url(self):
        img = self.productgallery_set.first()
        if img:
            return img.image.url
        return img #None

在您的产品模型下添加它并在您的模板中调用 get_image_url


推荐阅读