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.: миграция выполнена, все члены существуют в базе данных.

Вернуться на верх