Python 在层次结构中显示类别和子类别
我使用django mptt作为类别模型。我想显示屏幕截图中的类别和子类别列表。我可以展示的方式是所有列表,没有任何结构,如下所示 卧室用品 衣橱 两件式衣橱 3件式衣橱 床 双层矮床 大号矮床 这样很难知道哪一个是父类别,哪一个是子类别和孙子类别等。我可以使用Python 在层次结构中显示类别和子类别,python,django,django-models,django-views,django-mptt,Python,Django,Django Models,Django Views,Django Mptt,我使用django mptt作为类别模型。我想显示屏幕截图中的类别和子类别列表。我可以展示的方式是所有列表,没有任何结构,如下所示 卧室用品 衣橱 两件式衣橱 3件式衣橱 床 双层矮床 大号矮床 这样很难知道哪一个是父类别,哪一个是子类别和孙子类别等。我可以使用category.objects.root\u nodes() 这是我的模型、视图和模板 class Category(MPTTModel): name = models.CharField(max_length=100, bl
category.objects.root\u 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):
name=models.CharField(max_length=100,blank=True,null=True)
image=models.ImageField(null=True,blank=True,
上传到=上传家具图片路径)
slug=models.SlugField(最大长度=200,唯一性=True)
parent=treeforeingkey('self',null=True,blank=True,
相关_name='children',db_index=True)
def家具(请求,slug):
实例=获取对象或404(家具,slug=slug)
cart\u obj,new\u obj=cart.objects.new\u或\u get(请求)
categories=Category.objects.all()
上下文={
"家具":比如,,
“购物车”:购物车,
“类别”:类别
}
返回渲染(请求'furnitures/furniture.html',上下文)
{categories%%中的类别为%s}
- {{category.name}
{%endfor%}
所以我的问题是,我怎样才能把父类和子类分开,这样我才能像截图一样显示出来
下面是父类别及其子类别和孙子类别
因为您使用的是MPTTModel,所以最好的解决方案是使用mptt方法遍历树 如果要在模板中显示树结构,可能需要围绕mptt方法编写模板标记/过滤器,或者使用mptt库提供的标记/过滤器 示例解决方案: 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>
{%recursetree节点%}
-
{{node.name}
{%如果不是node.is_leaf_node%}
{{儿童}
{%endif%}
{%endrecursetree%}
详细解释您是否有一个名为“男士”的家长类别?如果没有将“男士”、“女士”、“孩子”放在哪里,我有一个卧室物品的家长类别,其子类别为alimrah(其子类别为2件式衣橱、3件式衣橱)、床(大号床、特大号床作为子类别),您可以在中查看演示。要查看侧边栏,您必须单击家具标题以获取解决方案。然而,我得到了一个错误,它以10为底表示int()的无效文本:“tree_id”我知道它为什么会引发这个错误。它要求我提供id,但我需要获取所有父类别及其子类别,而不仅仅是一个父类别。它是一个根还是多个根?然后使用category.objects.root\u nodes(),我相应地修改了解决方案。让我知道解决方案是否有用。这是我之前尝试过的,但我只得到父节点,而不是子节点,尽管它们有自己的子节点