为啥我不能使用类别详细视图?如果在django中使用它得到404?

Posted

技术标签:

【中文标题】为啥我不能使用类别详细视图?如果在django中使用它得到404?【英文标题】:why i cant use category detailview ? if use it get 404 in django?为什么我不能使用类别详细视图?如果在django中使用它得到404? 【发布时间】:2019-02-18 21:29:00 【问题描述】:

我想为 detailview 使用 category_slug 或 id_slug 作为 productdetailview 并在那里显示该类别的所有产品,但我不知道该怎么做 我使用了此视图,但出现错误 404。为什么 productdetailviewcategorydetailview 之间存在差异?请问可以帮我解决这个问题吗?

models.py

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

    def __str__(self):
        return self.name



class Brand(models.Model):
    name = models.CharField(max_length=120,unique=True)



class Product(models.Model):
    category = models.ManyToManyField(Category,blank=True)
    brand = models.ForeignKey(Brand,on_delete=models.CASCADE)
    car = models.ForeignKey(Car,on_delete=models.CASCADE)
    title = models.CharField(max_length=120,unique=True)
    slug = models.SlugField(unique=True)
    description = models.TextField(max_length=10000)
    price = models.DecimalField(max_digits=10,decimal_places=2)
    stock = models.PositiveIntegerField()
    active = models.BooleanField(default=True)
    timestamp = models.DateTimeField(auto_now_add=True,auto_now=False)
    updated = models.DateTimeField(auto_now=True,auto_now_add=False)
    defalut = models.ForeignKey(Category,related_name="defalut_category",blank=True,null=True,on_delete=models.CASCADE)




   class Meta:
        ordering = ['-timestamp']

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('products:product_detail',kwargs="slug":self.slug)

views.py

def ProductDetail(request,slug):
    product = get_object_or_404(Product,slug=slug,active=True)
    context = 
        "product":product
    
    template_name = "product_detail.html"
    return render (request,template_name,context)


def CategoryDetail(request,category_slug):
    category = get_object_or_404(Category,slug = category_slug)
    product = Product.objects.filter(category=category)
    context = 
        'category':category,
        'product': product
    
    template_name ="category_detail.html"
    return render(request,template_name,context)

urls.py

app_name ='category'

urlpatterns = [
    path('category-list/',views.CategoryList,name="category_list" ),
    re_path(r'^(?P<category_slug>[-\w]+)/$', views.CategoryDetail, name='category_detail'),

我的错误

找不到页面 (404) 请求方法:GET 请求网址:http://127.0.0.1:8000/category/elctroinc/ 提出者: products.views.CategoryDe​​tail 没有类别与给定的查询匹配。 您看到此错误是因为您的 Django 设置文件中有 DEBUG = True 。将其更改为 False,Django 将显示标准 404 页面。

【问题讨论】:

你能添加错误回溯以及你的urls.py吗? @JPG 我加了。 当我使用 category = Category.objects.filter(slug=category_slug) 时告诉我,但是当我使用 get objects 时得到 404。 您检查category_slug 是否正确出现并存在于数据库中? 错误提示没有提供slugCategory实例(category_slug 【参考方案1】:

问题在于 category_slug,因为两个朋友说@Manjo Jadhav,@JPG 我使用 id 而不是 category_slug 并且它正在工作。 tnx 寻求帮助的朋友。

【讨论】:

以上是关于为啥我不能使用类别详细视图?如果在django中使用它得到404?的主要内容,如果未能解决你的问题,请参考以下文章

使用具有不同类型细节的主 - 详细视图

如何在主详细信息应用程序中使详细信息视图可滚动

如何在 Swift iOS 中使 web 视图不可点击

在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板

为啥我不能将用户定义的设置作为变量包含在 Django 模板中?

在 viewCell,UIViewCollection 中使按钮可点击