• 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>