我是Django的新手,并试图找出为我的对象创建类别的URL的代码。它现在的工作方式我有一个每个类别的URL,但我正在尝试创建一个快捷方式,所以如果我创建更多的类别,我不必添加另一个URL到URLs.py.
模特:
class Store(models.Model):
FOOTWEAR = "Footwear"
CLOTHING = "Clothing"
OUTERWEAR = "Outerwear"
ITEM_CATEGORY_CHOICE = (
(FOOTWEAR, 'Footwear'),
(CLOTHING, 'Clothing'),
(OUTERWEAR, 'Outerwear'),
)
category = models.CharField(
max_length=20,
choices=ITEM_CATEGORY_CHOICE,
null=True,)
在我为每个类别提供网址之前。我能够设置特定类别的URL:
url(r'^category/(?P<category>[-\w]+)/$',
'collection.views.specific_category',
name="specific_category"),
在视图中我遇到了问题。我不确定我在意见中指出的是什么:
def specific_category(request, category):
if category:
sneakers = Sneaker.objects.filter(category = "__").order_by('-date')
else:
sneakers = Sneaker.objects.all().order_by('-date')
现在使用代码,页面打开空白。我觉得答案就在我脸上,我看不到它。我的模特错了吗?指出任何解释的资源也将非常感激。
答案 0 :(得分:0)
您应该做的是创建一个查找通用上下文变量的html文件,例如:
category_items.html
Category:
{{ category }}
Items:
{{ for item in items }}
{{ item.name }}
{{ endfor }}
这样,无论您在视图中过滤什么,您仍然可以使用相同的html页面显示结果。另外,将category = '__'
更改为category=category
,以便从网址中捕获类别名称。
views.py
def specific_category(request, category):
if category:
sneakers = Sneaker.objects.filter(category=category).order_by('-date')
else:
sneakers = Sneaker.objects.all().order_by('-date')
return render(request, 'category_items.html', {'category': category, 'items': sneakers})