用于按类别生成产品的模板过滤器

时间:2018-01-30 00:14:28

标签: python django django-templates django-template-filters

我有一个django项目,我在模板中显示产品。使用某种模板过滤器按类别显示产品的最佳方法是什么?例如,在模板上,如果我想按类别Hovis显示面包。目前,将显示数据库中的所有产品。

            <tr>
                <td><h5>{{ product.name }}</h5></td>
                <td><p><strong>{{ product.price }}</strong></p></td>
            </tr>

Models.py的副本(根据要求提供):

from django.db import models
from django.core.urlresolvers import reverse

class Category(models.Model):
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True, unique=True)

    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    # def get_absolute_url(self):
    #     return reverse('shop:product_list_by_category', args=[self.slug])

class Product(models.Model):
    category = models.ForeignKey(Category, related_name='products')
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('-created',)
        index_together = (('id', 'slug'),)

    def __str__(self):
        return self.name

    # def get_absolute_url(self):

1 个答案:

答案 0 :(得分:1)

我会将已准备好的数据从视图发送到模板,以避免前端的其他逻辑。您可以在视图中执行以下操作:

function compressImage(e){

     var reader = new FileReader();
     reader.readAsDataURL(e.target.files[0]);
     console.log(reader);
}

在模板中你只会这样做:

products  = Product.objects.all()

all_products_by_cat ={}
for product in products:
    if all_products_by_cat.get(product.category):
        all_products_by_cat[product.category].append(product)
    else:
        all_products_by_cat[product.category] = [product]