2015-12-29 53 views
0

我是Django的新手,并试图找出为我的对象创建类别的URL的代码。现在它的工作方式我有一个每个类别的URL,但我试图做一个快捷方式,所以如果我创建更多的类别,我不必再向URLs.py添加另一个URL。在Django中创建类似标签的功能

的型号:

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

我知道这一点。但是,在视图中返回“鞋类”将返回鞋类,无论我用作URL中的类别。如何返回视图中的所有类别,以便我手动输入URL中显示的任何类别? –

+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})