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 хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Ora Iro
- Жел. 24, 2024, 6:38 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:40ұпай,
- Бағалау ұпайлары-8
- Akiv Doros
- Қар. 11, 2024, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.