为啥我不能使用类别详细视图?如果在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。为什么 productdetailview
和 categorydetailview
之间存在差异?请问可以帮我解决这个问题吗?
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.CategoryDetail 没有类别与给定的查询匹配。 您看到此错误是因为您的 Django 设置文件中有 DEBUG = True 。将其更改为 False,Django 将显示标准 404 页面。
【问题讨论】:
你能添加错误回溯以及你的urls.py
吗?
@JPG 我加了。
当我使用 category = Category.objects.filter(slug=category_slug) 时告诉我,但是当我使用 get objects 时得到 404。
您检查category_slug
是否正确出现并存在于数据库中?
错误提示没有提供slug
的Category
实例(category_slug
)
【参考方案1】:
问题在于 category_slug,因为两个朋友说@Manjo Jadhav,@JPG 我使用 id 而不是 category_slug 并且它正在工作。 tnx 寻求帮助的朋友。
【讨论】:
以上是关于为啥我不能使用类别详细视图?如果在django中使用它得到404?的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板