Skip to main content
 首页 » 编程设计

python之带有类别 slug 的 django 组子类别

2025年05月04日32tuyile006

试图制作一个包含类别和子类别的链接目录页面,到目前为止有以下内容,问题是我无法将类别作为链接

models.py 
class Category(models.Model): 
"""Category""" 
name = models.CharField(max_length=50) 
slug = models.SlugField() 
 
def save(self, *args, **kwargs): 
 
                #self.slug = slugify(self.name) 
        self.slug = slugify(self.name) 
        super(Category, self).save(*args, **kwargs) 
def __unicode__(self): 
return self.name 
 
 
class SubCategory(models.Model): 
"""Sub Category""" 
category = models.ForeignKey(Category) 
name = models.CharField(max_length=50) 
slug = models.SlugField() 
 
def save(self, *args, **kwargs): 
 
        self.slug = slugify(self.name) 
        super(SubCategory, self).save(*args, **kwargs) 
 
def __unicode__(self): 
return self.name     

和

views.py 
@require_GET 
def links(request): 
"""Linkdirectory Page""" 
categories = Category.objects.all() 
subcategories = SubCategory.objects.all() 
return render(request, 'links.html', {'categories':         categories,             'subcategories': subcategories,}) 

为了按类别对子类别进行分组,我在

中使用了以下内容
{% regroup subcategories|dictsort:"category_id" by category as     categories_list %} 
 
<ul> 
{% for categories in categories_list %} 
<li>{{ categories.grouper }} 
           <li> <a href="/links/{{ categories.slug }}">{{ categories.name     }}</a></li> 
<ul> 
    {% for item in categories.list %} 
            <li><a href="/links/{{ item.slug }}">{{ item.name }}</a></li> 
    {% endfor %} 
</ul> 
</li> 
{% endfor %} 
</ul> 

这一切都很好地将子类别组合在一起

CAT1 --subcatLINK1 --subcatLINK2

但是我想要的是

CATLINK1 --subcatLINK1 --subcatLINK2

不确定如何以及是否有可能用自定义链接替换石斑鱼字符串,例如子类别链接,或者我是否以正确的方式解决这个问题

编辑,在下面添加 Bakkals 方法: 再次编辑 ;) 没关系,显然我还必须更新命名方案,下面的代码是工作版本。 尝试按照 Bakkal 的建议使用 category.subcategory_set.all

{% for category in categories %} 
<ul> 
<li><a href="/links/{{ category.slug }}">{{ category.name }}</a> 
{% for subcategory in category.subcategory_set.all %} 
<ul> 
            <li><a href="/links/{{ subcategory.slug }}">{{     subcategory.name }}</a></li> 
</ul> 
    {% endfor %} 
</li> 
</ul> 
{% endfor %} 
</li> 
</ul> 
{% endfor %} 

请您参考如下方法:

由于 SubCategory 包含一个指向 Category 的外键,您可以使用 category.subcategory_set 来获取子类别。

我发现这比您通过 category_id

手动进行分组更简单

所以你可以,例如将 categories 作为所有 Category 对象的查询集作为上下文传递给模板,然后在模板中

{% for category in categories %} 
    ... 
    {% for subcategory in category.subcategory_set.all %} 
    ... 
    {% endfor %} 
{% endfor %}