在层次结构中显示类别和子类别
show category and sub-categories in hierarchy
我正在使用 django-mptt 作为类别模型。我想显示屏幕截图中的类别和子类别列表。我可以显示的方式是没有任何结构的所有列表
卧室用品
衣橱
2 件衣橱
3 件衣橱
床
双人矮床
大号矮床
这样很难知道哪个是父类,哪个是子类,孙类等。我可以用上面的方式显示,也可以只显示父类Category.objects.root_nodes()
这是我的模型、视图和模板
class Category(MPTTModel):
name = models.CharField(max_length=100, blank=True, null=True)
image = models.ImageField(null=True, blank=True,
upload_to=upload_furniture_image_path)
slug = models.SlugField(max_length=200, unique=True)
parent = TreeForeignKey('self', null=True, blank=True,
related_name='children', db_index=True)
def furniture(request, slug):
instance = get_object_or_404(Furniture, slug = slug)
cart_obj, new_obj = Cart.objects.new_or_get(request)
categories = Category.objects.all()
context = {
'furniture': instance,
'cart': cart_obj,
'categories': categories
}
return render(request, 'furnitures/furniture.html', context)
<div class="panel-body">
<ul class="nav nav-pills nav-stacked category-menu">
{% for category in categories %}
<li>{{category.name}}</li>
{% endfor %}
</ul>
</div>
所以我的问题是如何将父类别和子类别分开以便在屏幕截图中显示?
这是父类及其子类和孙类
由于您使用的是 MPTTModel,因此最好的解决方案是使用 mptt 方法遍历树。
如果您想在模板中显示树结构,您可能需要围绕 mptt 方法编写模板 tags/filters 或使用 mptt 库提供的 tags/filters。
示例解决方案:
views.py
return render_to_response('furnitures/furniture.html',
{'nodes':Category.objects.all()},
context_instance=RequestContext(request))
模板:
<ul class="root">
{% recursetree nodes %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
<ul class="children">
{{ children }}
</ul>
{% endif %}
</li>
{% endrecursetree %}
</ul>
解释的很详细here
我正在使用 django-mptt 作为类别模型。我想显示屏幕截图中的类别和子类别列表。我可以显示的方式是没有任何结构的所有列表
卧室用品
衣橱
2 件衣橱
3 件衣橱
床
双人矮床
大号矮床
这样很难知道哪个是父类,哪个是子类,孙类等。我可以用上面的方式显示,也可以只显示父类Category.objects.root_nodes()
这是我的模型、视图和模板
class Category(MPTTModel):
name = models.CharField(max_length=100, blank=True, null=True)
image = models.ImageField(null=True, blank=True,
upload_to=upload_furniture_image_path)
slug = models.SlugField(max_length=200, unique=True)
parent = TreeForeignKey('self', null=True, blank=True,
related_name='children', db_index=True)
def furniture(request, slug):
instance = get_object_or_404(Furniture, slug = slug)
cart_obj, new_obj = Cart.objects.new_or_get(request)
categories = Category.objects.all()
context = {
'furniture': instance,
'cart': cart_obj,
'categories': categories
}
return render(request, 'furnitures/furniture.html', context)
<div class="panel-body">
<ul class="nav nav-pills nav-stacked category-menu">
{% for category in categories %}
<li>{{category.name}}</li>
{% endfor %}
</ul>
</div>
所以我的问题是如何将父类别和子类别分开以便在屏幕截图中显示?
这是父类及其子类和孙类
由于您使用的是 MPTTModel,因此最好的解决方案是使用 mptt 方法遍历树。
如果您想在模板中显示树结构,您可能需要围绕 mptt 方法编写模板 tags/filters 或使用 mptt 库提供的 tags/filters。
示例解决方案:
views.py
return render_to_response('furnitures/furniture.html',
{'nodes':Category.objects.all()},
context_instance=RequestContext(request))
模板:
<ul class="root">
{% recursetree nodes %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
<ul class="children">
{{ children }}
</ul>
{% endif %}
</li>
{% endrecursetree %}
</ul>
解释的很详细here