Python 在Django中创建类似标记的特性

Python 在Django中创建类似标记的特性,python,django,tags,categories,Python,Django,Tags,Categories,我是Django的新手,正在尝试找出为我的对象的类别创建URL的代码。它的工作方式现在我为每个类别都有一个URL,但我正在尝试创建一个快捷方式,这样如果我创建更多的类别,我就不必再向URL.py添加另一个URL 模型: class Store(models.Model): FOOTWEAR = "Footwear" CLOTHING = "Clothing" OUTERWEAR = "Outerwear" ITEM_CATEGORY_CHOICE = (

我是Django的新手,正在尝试找出为我的对象的类别创建URL的代码。它的工作方式现在我为每个类别都有一个URL,但我正在尝试创建一个快捷方式,这样如果我创建更多的类别,我就不必再向URL.py添加另一个URL

模型:

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:

url(r'^category/(?P<category>[-\w]+)/$',
        'collection.views.specific_category',
        name="specific_category"),

现在代码保持原样,页面将打开为空白。我觉得答案就在我面前,我看不出来。我的模型错了吗?如果您能为我提供任何有关解释的参考资料,我将不胜感激。

您应该创建一个html文件,查找通用上下文变量,例如:

category_items.html

Category:
{{ category }}

Items:
{{ for item in items }}
    {{ item.name }}
{{ endfor }}
这样,无论您在视图中过滤什么,您仍然可以使用相同的html页面显示结果。另外,将
category='.\u'
更改为
category=category
,这样它将从url中捕获类别名称

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

您没有为视图代码返回任何内容,它将如何工作?我知道这一点。但在视图中返回“鞋类”将返回鞋类,无论我在URL中使用什么类别。如何返回视图中的所有类别,以便手动键入URL中显示的任何类别?抱歉,我不明白您试图使用视图方法做什么。您的视图必须返回内容(实际上,完整的http响应,而不仅仅是内容),它不指向任何地方。如果你不返回内容,你会得到一个空页面。我想这是我的问题。如何将返回指向所有类别?因此,如果我想手动键入“\uuuuu/类别/服装”,该网站将返回所有带有服装类别的物品?
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})