Ненашел в рецептах, решил написать, мож кому пригодиться Итак унас имееться модель Category, которая имеет связь ForeignKey на саму себя(на предка). И нам необходимо отоброзить это дерево в шаблоне. Создаем модель models.py
class Category(models.Model):
title = models.CharField(max_length=250)
parent = models.ForeignKey('self',blank=True,null=True)
description = models.TextField()
Как видно, поле parent позволяет указать родителя и таким образом создать вложения неограниченной глубины. Для того что бы организовать рекрусивный вывод информации, воспользуемся шаблрнными тегами. Создам папку templatetags в вашем приложении(не забываем о файлике __init__.py). В папке создаем файл category_tree.py и пишим там такое:
from django import template
from myapp.models import Category
register = template.Library()
@register.inclusion_tag('myapp/templatetags/category_tree.html')
def category_tree(context, category):
children = Category.objects.filter(parent=category)
return {'category': category, 'children' : children}
* myapp - имя вашего приложения Создаем шаблон для тега. Для этого создаем файл category_tree.html в папке templatetags, с таким содержимым:
{% load category_tree %}
{{ category.title }}
{% for child in children %}
{% category_tree child %}
{% endfor %}
Вот и все. Наш шаблонный тег готов. Теперь о том как использовать в шаблоне. Для этого надо в шаблон.вставить этот код:
{% load category_tree %}
{% for category in categories %}
{% category_tree category %}
{% endfor %}
P.S. Для того, кому это кажеться велосипедом, есть django-mptt
Updated 24 Jan. 2013, 20:40 by NikitaKurinny.