LukinterLab
LukInterLab

LukInterLab- -LukInterLab

profile-pic

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

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

Пока комментариев нет.

Оставьте коментарий