带有类别 slug 的 django 组子类别
django group subcategory with category slug
尝试制作一个包含类别和子类别的 link 目录页面,到目前为止有以下内容,问题是我无法将类别作为 link
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
不确定如何以及是否可以用自定义 link 替换石斑鱼字符串,就像子类别 link 一样,或者我是否绕过这个
已编辑,在下面添加了 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 %}
尝试制作一个包含类别和子类别的 link 目录页面,到目前为止有以下内容,问题是我无法将类别作为 link
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
不确定如何以及是否可以用自定义 link 替换石斑鱼字符串,就像子类别 link 一样,或者我是否绕过这个
已编辑,在下面添加了 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 %}