Не первый раз уже сталкиваюсь с необходимостью создания деревьев на YUI. Прошлый раз дерево было тоже ненавязчивым, и как и прежде, я строил дерево из разметки. Но в прошлый раз данные для исходного ul строил хитрый sql скрипт использующий всю мощь oracle. В этот раз данные генерирует Django ORM, а значит и обрабатывать их надо по "джанговски".
Первый шаблон - итерация по списку категорий:
<div id="markup">
<ul>
{% for category in categorys %}
<li>
{% if category.parent %}
{% else %}
{% include "category_intree.html" %}
{% endif%}
</li>
{% endfor %}
</ul>
</div>
Второй (вложенный) - итерация по вложенному списку категорий:
<a href="{% url category category.pk %}">{{ category }}</a>
{% ifnotequal category.child_category_count 0 %}
<ul class="subcategory-list">
{% for subcategory in categorys %}
{% ifequal subcategory.parent category %}
{% with subcategory as category %}
<li>{% include "category_intree.html"%}</li>
{% endwith%}
{% endifequal %}
{% endfor %}
</ul>
{% endifnotequal %}
Но, ведь, у дерева может быть несколько уровней. Вот для этого, как раз, во втором шаблоне красуется инструкция
{% with subcategory as category %}
которая переопределяет локальный "контекст" шаблона.
Фактически, имеем рекурсивный вызов вложенного шаблона. Код, конечно, далеко не идеален, но сама возможность создания таких штук очень радует.
Комментариев нет:
Отправить комментарий