
выводим внучатые категории
13 февраля 2025 г. 16:59
Вот решение для отображения внучатых категорий в указанном шаблоне, основанное на предположении, что c
представляет собой экземпляр модели категории, имеющей метод get_children
.
<ul>
{% for c in categories %}
{% if c.is_root_node %}
<li {% if category.slug == c.slug %}class="selected"{% endif %}>
<a href="{{ c.get_absolute_url }}" class="pt-link">{{ c.title }}</a>
{% if c.get_children %}
<ul>
{% for child in c.get_children %}
<li {% if category.slug == child.slug %}class="selected"{% endif %}>
<a href="{{ child.get_absolute_url }}" class="pt-link">{{ child.title }}</a>
{% if child.get_children %}
<ul>
{% for grandchild in child.get_children %}
<li {% if category.slug == grandchild.slug %}class="selected"{% endif %}>
<a href="{{ grandchild.get_absolute_url }}" class="pt-link">{{ grandchild.title }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endif %}
{% endfor %}
</ul>
Пояснения:
{% if child.get_children %}
: Проверяем, есть ли у дочерней категории (child
) свои дочерние категории (внучатые).- Вложенный цикл
{% for grandchild in child.get_children %}
: Если уchild
есть дочерние категории, то проходим по ним, называя каждуюgrandchild
. {{ grandchild.get_absolute_url }}
и{{ grandchild.title }}
: Отображаем URL и заголовок каждой внучатой категории.- HTML-структура: Внучатые категории располагаются во вложенном списке
<ul>
.
Важные замечания:
- Глубина вложенности: Этот код отображает только внучатые категории. Если вам нужна поддержка более глубоких уровней вложенности (правнуки и т.д.), вам потребуется рекурсивный шаблон или пользовательский тег шаблона.
category.slug
: Обратите внимание на использованиеcategory.slug
для выделения текущей категории. Убедитесь, что переменнаяcategory
доступна в контексте шаблона и представляет собой текущую просматриваемую категорию. Если это не так, заменитеcategory.slug
на правильную переменную, содержащую slug текущей категории.- Стиль: CSS-класс
"selected"
нужно определить в вашей таблице стилей CSS для визуального выделения выбранной категории. - Производительность: Для категорий с большим количеством уровней вложенности рекомендуется использовать рекурсивные шаблоны или пользовательские теги шаблонов, чтобы избежать избыточной логики в самом шаблоне и потенциальных проблем с производительностью. Рекурсивный шаблон будет более элегантным и легче поддерживаемым решением для отображения произвольной глубины дерева категорий.
Пока комментариев нет.