使用Django构建“无限”菜单树

时间:2014-01-12 01:49:59

标签: python django recursion django-models django-templates

我有一个模特:

 menuName = models.CharField(max_length=50)
 menuAlias = models.CharField(max_length=50, unique=True, validators=[aliasvalidator])
 published = models.BooleanField()
 parentId = models.IntegerField()

并且想要构建一个模板,其中包含每个entrie的无限父子关系的菜单,其中“first-level”元素的父ID是0.并且因此构建我想要的任何html菜单树。

1 个答案:

答案 0 :(得分:0)

不要重新发明轮子;使用专用的Django扩展来构建树结构。有几个可用的包实现Modified Preorder Tree Traversal model

其中主要是django-mptt;它将使您的菜单构建更加轻松和高效:

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class Menu(MPTTModel):
    menuName = models.CharField(max_length=50)
    menuAlias = models.CharField(max_length=50, unique=True, validators=[aliasvalidator])
    published = models.BooleanField()
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)