NSProject
NSProject30 апреля 2022 г. 13:04

Django MPTT вывод дерева категорий

Django

Здраствуйте похоже я так и не понял всю суть 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
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

1
NSProject
  • 7 сентября 2022 г. 1:10

И всё таки я решил эту проблему. Написав реальный такой костыль. Решив тем самым свою проблему.

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    AD

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:50баллов,
    • Очки рейтинга-4
    m
    • molni99
    • 26 октября 2024 г. 1:37

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:80баллов,
    • Очки рейтинга4
    m
    • molni99
    • 26 октября 2024 г. 1:29

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:20баллов,
    • Очки рейтинга-10
    Последние комментарии
    i
    innorwall13 ноября 2024 г. 23:03
    Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
    i
    innorwall13 ноября 2024 г. 20:09
    Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
    i
    innorwall11 ноября 2024 г. 22:12
    Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
    i
    innorwall11 ноября 2024 г. 18:23
    QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
    i
    innorwall11 ноября 2024 г. 15:50
    Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
    Сейчас обсуждают на форуме
    i
    innorwall13 ноября 2024 г. 18:52
    добавить qlineseries в функции PMID 35774217 Free PMC article priligy cvs
    i
    innorwall11 ноября 2024 г. 10:55
    Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
    9
    9Anonim25 октября 2024 г. 9:10
    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
    ИМ
    Игорь Максимов3 октября 2024 г. 4:05
    Реализация навигации по разделам Спасибо Евгений!

    Следите за нами в социальных сетях