Django MPTT вывод дерева категорий
Здраствуйте похоже я так и не понял всю суть Django-MPTT батарейки. Так как не могу решить простую задачу с выводом категорий. По этому обращаюсь к вам за помощью.
Начну с начала. Изначально я пытался сделать древовидную структуру просто в Django, но просидев до утра понял что оно того не стоит и удалил несколько строк кода.
Так как отображение мне нужно на всех страницах сайта то эту функцию я запихал в контекст.
Зарывшись в гугл и яндекс были найдены примитивные рецепты. В принципе документация на MPTT. Думаю вот оно то что искал ну и вот три дня мучаюсь с этими деревьями.
Код models.py:
class Category(MPTTModel): name = models.CharField('Category', max_length=50) slug = models.SlugField('Category Slug', max_length=50, unique=True) parent = TreeForeignKey('self', verbose_name='Parent Category', on_delete=models.PROTECT, db_index=True, null=True, blank=True, related_name='category_children') is_published = models.BooleanField(default=False) def __str__(self): return self.name class MPTTMeta: order_insertion_by = ['name'] class Meta: verbose_name = 'Category' verbose_name_plural = 'Categories'
Простенькая такая модель. И вот на основе её у меня не получается создать дерево примерно такого вида:
При написании своего костыля у меня получилось вот какое вот чудище:
{% for category in category_list %} {% if category.base == True %} <li class="side-nav-title side-nav-item"> {{ category.name }}</li> {% if category.category_children.count != 0 %} {% for catego in category.category_children.all %} <li class="side-nav-item"> {% if catego.category_children.count != 0 %} <a data-bs-toggle="collapse" href="#{{ catego.name }}" aria-expanded="false" aria-controls="sidebarTasks" class="side-nav-link"> <i class="uil-clipboard-alt"></i> <span> {{ catego.name }} </span> <span class="menu-arrow"></span> </a> <div class="collapse" id="{{ catego.name }}"> <ul class="side-nav-second-level"> {% for item in catego.category_children.all %} <li> <a href="apps-tasks.html">{{ item.name }}</a> </li> {% endfor %} </ul> </div> </li> {% else %} <a href="#" class="side-nav-link"><i class="uil-clipboard-alt"></i> <span> {{ catego.name }} </span></a> </li> {% endif %} {% endfor %} {% endif %} {% endif %} {% endfor %}
Нехватает рекурсии. Так вот и вопрос как это всё реализовать при помощи mptt django и их кода. А то я понять не могу
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.