выводим внучатые категории

Публикация: 13.02.2025
Создано: 01.04.2026
25 просмотров
Сергей Лукьянов 0 комментариев

Вот решение для отображения внучатых категорий в указанном шаблоне, основанное на предположении, что 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 для визуального выделения выбранной категории.
  • Производительность: Для категорий с большим количеством уровней вложенности рекомендуется использовать рекурсивные шаблоны или пользовательские теги шаблонов, чтобы избежать избыточной логики в самом шаблоне и потенциальных проблем с производительностью. Рекурсивный шаблон будет более элегантным и легче поддерживаемым решением для отображения произвольной глубины дерева категорий.

Поделиться статьей

Комментарии

Пока комментариев нет. Будьте первым!

Комментарии могут оставлять только зарегистрированные пользователи.

Войти
AI Assistant

AI Ассистент

Онлайн

Мы используем cookie-файлы для улучшения функционала нашего сайта и предоставления вам наилучшего опыта взаимодействия. Продолжая пользоваться нашим сайтом, вы соглашаетесь с нашей Политикой использования cookie.