Python 如何在django中按品牌或类别筛选产品

Python 如何在django中按品牌或类别筛选产品,python,django,Python,Django,我在一个Django博客上工作,我希望能够按类别或品牌过滤产品 **Page not found (404)** **Request Method: GET** **Request URL: http://127.0.0.1:8000/nestle/** **Raised by: shop.views.product_list** **No Category matches the given query.** 该代码对于单个实例非常有效,但当我尝试同时使用两个实例时失败。

我在一个Django博客上工作,我希望能够按类别或品牌过滤产品

**Page not found (404)**

**Request Method:   GET**

**Request URL:  http://127.0.0.1:8000/nestle/**

**Raised by:    shop.views.product_list**

**No Category matches the given query.**
该代码对于单个实例非常有效,但当我尝试同时使用两个实例时失败。i、 e.如果我要评论品牌或类别,代码运行良好,但两者不能一起工作

**请求URL:*--雀巢是一个品牌,但引发的错误是没有与给定查询匹配的类别。。我想让它按品牌而不是类别过滤

这是我的views.py文件

def product_list(request,  category_slug=None, brand_slug=None):
   category = None
   categories = Category.objects.all()
   products = Product.objects.filter(available=True)

   brand = None
   brands = Brand.objects.all()
   products = Product.objects.filter(available=True)

   if category_slug:
      category = get_object_or_404(Category, slug=category_slug)
      products = products.filter(category=category)


    elif brand_slug:
       brand = get_object_or_404(Brand, slug=brand_slug)
       products = products.filter(brand=brand)
   


    return render(request,
       'shop/product/list.html',
       {'category': category,
       'categories': categories,
       'brand': brand,
       'brands': brands,
       'products': products})
这是我的型号。py

from django.urls import reverse

class Category(models.Model):
    name = models.CharField(max_length=200,db_index=True)
    slug = models.SlugField(max_length=200,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 Brand(models.Model):
    name = models.CharField(max_length=200,db_index=True)
    slug = models.SlugField(max_length=200,unique=True)
    class Meta:
        ordering = ('name',)
        verbose_name = 'brand'
        verbose_name_plural = 'brands'

    def __str__(self):
        return self.name


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


class Product(models.Model):
    category = models.ForeignKey(Category,related_name='products',on_delete=models.CASCADE)
    brand = models.ForeignKey(Brand,related_name='products',on_delete=models.CASCADE)
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True)
    image = models.ImageField(upload_to='products/%Y/%m/%d',blank=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 = ('name',)
        index_together = (('id', 'slug'),)


    def __str__(self):
        return self.name


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

有人能帮我吗?对不起,我是一个新手,试图通过教程学习。谢谢

为什么你要通过两个slug,URL.py的
看起来怎么样?但是这里的
产品列表按品牌
将永远不会“启动”,因为前面的URL匹配所有与
产品列表按品牌
匹配的URL。请问有什么办法吗?你能帮忙吗?谢谢你的回复。其目的是为了在品牌和品类上获得一个独立的slug。这就是应用程序
from django.url导入路径的url.py的外观。导入视图app_name='shop'urlpatterns=[path('',views.product_list,name='product_list'),path('/',views.product_list,views='product_list'by_category'),path('/',views.product_list,name='product_list'by_brand'),]
为什么要传递两个slug,
URL.py
看起来怎么样?但是这里的
product\u list\u by\u brand
将永远不会“激发”,因为前面的URL匹配所有与
product\u list\u by\u brand
匹配的URL。所以有什么办法吗?你能帮忙吗?谢谢你的回复。其目的是为了在品牌和品类上获得一个独立的slug。这就是应用程序
from django.url导入路径的url.py的外观。导入视图app_name='shop'urlpatterns=[路径(''',views.product_list,name='product_list'),路径('/',views.product_list,views='product_list',views.product_list,name='product_list.'by_brand'),]