Представлять дерево объектов в шаблоне Django

У меня есть модель Django, которая имеет ForeignKey для того же класса, эффективно создавая дерево:

class Tag(models.Model):
    name = models.CharField(max_length=50)
    parent = models.ForeignKey('self', blank=True, null=True)

Игра с рекурсивом в оболочке Django (./manage.py shell), Я легко могу представить дерево в виде простого текста:

def nodes(parent, level):
    children = Tag.objects.filter(parent=parent)
    for c in children:
        spaces = ""
        for i in xrange(0,level):
            spaces+="  "
        print "%s%s" % (spaces,c.name)
        nodes(c.pk,level+1)

nodes(None,0)

В чем я не уверен, так это как получить все дерево в шаблоне Django. Я'мы создали собственный тег шаблона, чтобы сделать это проще, но я могуt понять, как передать данные в шаблон, чтобы легко перебирать дерево для отображения в шаблоне. Вот's основной тег шаблона.

@register.inclusion_tag("core/tags.html")
def render_tags(**kwargs):
    tags = Tag.objects.all()
    return {"tags":tags}

Я знаю, что вышеупомянутое является очень простым, я просто не уверен, куда идти отсюда. Я подумал, что было бы проще, если бы у класса Tag была функция для получения своих потомков, поэтому я также включил в класс:

    def children(self):
        return Tag.objects.filter(parent=self.pk)

я используюself.pk там, тогда корень дерева простоrootTag=Tag(), поскольку у него нет pk, поскольку он не сохранен,rootTag.children() найдет любые теги, которые не имеют родительского тега, и любой из этих тегов может просто продолжать иметь своиchildren() функция называется. Но, как я уже сказал, я не знаю, как превратить это в единую структуру данных для передачи в мой шаблон.

Мысли? Я думаю, что я, вероятно, хочу построить своего рода диктат, яЯ просто не в состоянии пройти здесь.

Ответы на вопрос(2)

Ваш ответ на вопрос