【问题标题】:How to count products in Django template?如何计算 Django 模板中的产品?
【发布时间】:2020-11-12 18:14:43
【问题描述】:

我是按类别获取产品,我想以Showing Products 1-24 of 10 Result这种格式显示计数后的产品,我的产品是按类别显示的,请告诉我如何在计数后显示产品在那个类别中。这意味着如果一个类别有 20 个产品,那么它将在我的产品列表页面上显示 20 product

class SubCategory(models.Model):
    subcat_name=models.CharField(max_length=225)
    subcat_slug=models.SlugField(max_length=225, unique=True)
    category = models.ForeignKey('Category', related_name='subcategoryies', on_delete=models.CASCADE, blank=True, null=True)

这是我的产品 models.py 文件...

class Product(models.Model):
    name=models.CharField(max_length=225)
    slug=models.SlugField(max_length=225, unique=True)
    subcategory=models.ForeignKey('SubCategory', related_name='prosubcat', on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return self.name

这是我的model.py 文件代码...

def SubCategorySlugListAPIView(request, subcat_slug):
    subcategories = SubCategory.objects.all()
    product = Product.objects.all()
    if subcat_slug:
        subcategory = get_object_or_404(SubCategory, subcat_slug=subcat_slug)
        productlist = product.filter(subcategory=subcategory)
        paginator = Paginator(productlist, 12)
        page_number = request.GET.get('page')
        product = paginator.get_page(page_number)
template_name = 'mainpage/cat-products.html'
context = {'product': product,
           'subcategories': subcategories, 'subcategory': subcategory}
return render(request, template_name, context)

这是我的cat-products.html 文件...

<div class="search-count">
    <h5>Showing Products  {{product.count}}</h5>
</div>

这里没有显示,请告诉我如何在此处显示产品数量。

【问题讨论】:

    标签: python django django-views django-templates django-pagination


    【解决方案1】:

    试着像这样改变你的观点。

       def SubCategorySlugListAPIView(request, subcat_slug):
            subcategories = SubCategory.objects.all()
            subcategory = get_object_or_404(SubCategory, subcat_slug=subcat_slug)            
            productlist = Product.objects.filter(subcategory=subcategory)
            paginator = Paginator(productlist, 12)
            page_number = request.GET.get('page')
            product = paginator.get_page(page_number)
            template_name = 'mainpage/cat-products.html'
            context = {'product': product,
                   'subcategories': subcategories, 'subcategory': subcategory}
            return render(request, template_name, context)

    或者你也可以在模板中使用这个。

    <h5>Showing Products  {{subcategory.prosubcat.all.count}}</h5>
    

    编辑:在这里我可以看到你正在使用paginator,所以你可以这样做。

    Showing products {{product.start_index}} - {{prodct.end_index}} of {{product.count}} results.
    

    有关分页的更多详细信息,请参阅docs

    【讨论】:

    【解决方案2】:

    您可以使用 Django 的 count 函数,然后将其作为视图的一部分传递。

    像这样使用它

    context = {'count': Product.objects.count()}
    

    然后它应该返回您的查询集中有多少产品。那么,在您的 HTML 文件中,您可以简单地将其呈现为

    <div class="search-count">
      <h5>Showing Products {{ count }}</h5>
    </div>
    

    编辑

    在查看了您的样本后,我认为应该是

    Product.objects.filter(subcategory=subcat_slug).count()
    

    【讨论】:

    • 它在计算数据库产品总数,但我想计算特定类别的产品...
    • 也许是Products.objects.filter(category=subcat_slug).count()?您可以将这些功能混合在一起,因为在过滤产品后,它仍然是一个查询集对象。
    • 我做到了,但它显示了这个错误object of type 'int' has no len()`
    • 您能告诉我您是如何使用我的代码的吗?如果您尝试将其解析为len(Products.object.filter...),请删除len,因为.count() 已经返回长度。
    • 我用过这个productlist = Product.objects.filter(subcategory=subcategory).count(),请查看我上面的视图文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多