在Django中创建类似标签的功能

时间:2015-12-29 19:28:16

标签: python django tags categories

我是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')

现在使用代码,页面打开空白。我觉得答案就在我脸上,我看不到它。我的模特错了吗?指出任何解释的资源也将非常感激。

1 个答案:

答案 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})