Django создает несколько колонок-контейнеров в шаблоне и заполняет их несколькими значениями из QuerySet
Я совсем новичок в веб-разработке, поэтому столкнулся с некоторыми трудностями при попытке связать html-шаблоны с кодом Django. Мой план для определенной страницы моего проектируемого сайта состоит в том, чтобы сверху был заголовок, затем ниже - 3 контейнера в виде колонок (слева направо, представляющие, т.е., различные группы), заполненные именами членов этих групп (один под другим, каждый член в отдельном маленьком контейнере с фотографией, именем и описанием). Я подумал, что, поскольку я использую Django, было бы глупо жестко кодировать всех членов в контейнеры, и, вероятно, есть какие-то методы заполнения этих столбцов из кода. Я использовал циклы. Вот шаблон ("core" - это имя приложения, шаблоны находятся в директории project/core/templates/core):
{% extends 'core/base.html' %}
{% block content %}
<h1>{{title}}</h1>
<div>Characters</div>
<div>
{% for fac in factions %}
{% if fac == outers %}
<div>
<h2>{{fac}}</h2>
{% for char in fac %}
<div>
<h3>{{char.name}}</h3>
<h3>{{char.description}}</h3>
</div>
{% endfor %}
</div>
{% endif %}
{% if fac == resistance %}
...
{% endfor %}
</div>
{% endblock %}
Файл core/models.py:
class Character(models.Model):
FACTION_CHOICES = (
('outers', 'Outer World'),
('resistance', 'Resistance'),
('neutrals', 'Neutral characters'),
)
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=255, blank=True, db_index=True, default='')
faction = models.CharField('Faction', max_length=100, choices=FACTION_CHOICES, default='neutrals')
description = models.TextField(blank=True)
content = models.TextField(blank=True)
photo = models.ImageField(upload_to="photos/%Y/%m/%d/", blank=True)
time_create = models.DateTimeField(auto_now_add=True)
time_update = models.DateTimeField(auto_now=True)
objects = models.Manager()
def __str__(self):
return self.name
class Meta:
ordering = ['-time_create']
indexes = [models.Index(fields=['-time_create'])]
Соответствующее представление из core/views.py:
<...>
def characters(request):
chars = Character.objects.all()
faction_outers = Character.objects.filter(faction='outers')
faction_resistance = Character.objects.filter(faction='resistance')
faction_neutrals = Character.objects.filter(faction='neutrals')
factions = [faction_outers, faction_resistance, faction_neutrals]
data = {'title': "Characters", 'menu': menu, 'characters': chars, 'factions': factions}
return render(request, 'core/chars.html', context=data)
Разделение групп на несколько переменных было сделано, так как метод через функцию regroup внутри шаблона не помог, и я подумал, что проблема в работе regroup. Но и приведенный выше способ не помог. Тестовая страница сервера в браузере показывает в своем коде <div> " " == $0 </div>
на месте, где должен располагаться список участников.
Итак, мой вопрос - есть ли возможность создавать и заполнять эти контейнерные колонки циклами с данными из QuerySets, и если есть, то не могли бы вы объяснить мне, как это правильно сделать?
Если необходима дополнительная информация, я готов ее предоставить. Заранее большое спасибо за советы.
P.S.: миграция выполнена, все члены существуют в базе данных.