Django Многие категории во многие подкатегории в шаблоне - PullRequest
0 голосов
/ 10 июля 2020
• 1000 *

Я пытаюсь изменить свой базовый шаблон, чтобы использовать раскрывающиеся меню, где каждая категория представляет собой выбор, а затем имена переменных появляются в подменю.

Чтобы эта работа работала, создал пользовательский процессор контекста, который содержит представления для создания некоторых глобальных тегов шаблона, чтобы я мог добавлять представления в свой базовый шаблон.

Как бы я go мог написать новое представление или расположить теги шаблона, чтобы эта структура меню будет работать?

Пользовательский контекстный процессор:

from .models import Category, Subcategory, Indicator
from django import template

# The context processor function
def categories(request):
    all_categories = Category.objects.all()

    return {
        'categories': all_categories,
    }

def indicators(request):
    all_indicators = Indicator.objects.all()

    return {
        'indicators': all_indicators,
    }

Модели:

from django.db import models
from django.contrib.auth.models import User

class Indicator(models.Model):
    name = models.CharField(max_length = 200, blank=False)
    short_name = models.CharField(max_length = 200, blank=False)
    context_link = models.URLField(blank=True, null=True)
    category = models.ManyToManyField(Category, blank=True)
    subcategory = models.ManyToManyField(Subcategory, blank=True)
    notes = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.name

class Category(models.Model):
    name = models.CharField(max_length = 200, blank=False)

    def __str__(self):
        return self.name

class Subcategory(models.Model):
    name = models.CharField(max_length = 200, blank=False)
    category = models.ForeignKey(Category, null=True, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.name

Base. html раскрывающееся меню html

<div class="ui simple dropdown item">
    Indicators <i class="dropdown icon"></i>
    <div class="menu">
        {% for category in categories %}
        <div class="item">
            <i class="dropdown icon"></i>
            {{ category.name }}
            <div class="menu">
                {% for indicator in indicators %}
                    {% if indicator.category_id == category.id%}
                        <a class="item" href="#">{{ indicator.name }}</a>
                    {% endif %}
                {% endfor %}
            </div>
        </div>
        {% endfor %}
    </div>
</div>
...