【问题标题】:Creating tag-like feature in Django在 Django 中创建类似标签的功能
【发布时间】:2015-12-29 19:28:16
【问题描述】:

我是 Django 新手,并试图找出为我的对象创建类别 URL 的代码。它现在的工作方式我为每个类别都有一个 URL,但我正在尝试创建一个快捷方式,因此如果我创建更多类别,我不必向 URLs.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(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')

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

【问题讨论】:

  • 您的视图代码没有返回任何内容,它是如何工作的?
  • 我知道这一点。但是,无论我在 URL 中使用什么作为类别,在视图中返回“鞋类”都会返回鞋类。如何返回视图中的所有类别,以便我在 URL 中手动输入的类别显示?
  • 对不起,我不明白你想用你的视图方法做什么。
  • 您的视图必须返回内容(实际上,完整的http响应,不仅仅是内容),它没有指向任何地方。如果你不返回内容,你会得到一个空白页面。
  • 我想这是我的问题。如何将返回指向所有类别?因此,如果我想手动输入“__/categories/clothing”,该网站将返回所有具有服装类别的商品?

标签: python django tags categories


【解决方案1】:

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

category_items.html

Category:
{{ category }}

Items:
{{ for item in items }}
    {{ item.name }}
{{ endfor }}

这样,无论您在视图中过滤什么,您仍然可以使用相同的 html 页面显示结果。另外,将category = '__' 更改为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})

【讨论】:

    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多