Не удалось разобрать остаток: '()' из 'topic_files.items()'

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

Модели:

from django.db import models
from users.models import UserProfile

# Create your models here.
class ResearchWork(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    
    def __str__(self):
        return self.name
    
class Topic(models.Model):
    research_work = models.ForeignKey(ResearchWork, related_name='topics', on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=100)
    
    def __str__(self):
        if self.research_work is None:
            return f"Unassigned - {self.name}"
        return f"{self.research_work.name} - {self.name}"

class Assignment(models.Model):
    student = models.ForeignKey(UserProfile, related_name='student_assignment', on_delete=models.CASCADE)
    teacher = models.ForeignKey(UserProfile, related_name='teacher_assignment', on_delete=models.CASCADE)
    is_accepted = models.BooleanField(default=False) # charfield
    is_reviewed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    text = models.TextField(blank=True)
    
    
    def __str__(self):
        return f"Assignment for {self.student.user.username} with {self.teacher.user.username}"
    
    
class Submission(models.Model):
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE)
    SEMESTER_CHOICES = (
        ('1', 'Semester 1'),
        ('2', 'Semester 2'),
        ('3', 'Semester 3'),
        ('4', 'Semester 4'),
        ('5', 'Semester 5'),
        ('6', 'Semester 6'),
        ('7', 'Semester 7'),
        ('8', 'Semester 8'),
    )
    semester = models.CharField(max_length=100, null=True, choices=SEMESTER_CHOICES)
    research_work = models.ForeignKey(ResearchWork, on_delete=models.CASCADE, null=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    
    
    def __str__(self):
        research_work_name = "No Research Work Assigned" if self.research_work is None else self.research_work.name
        return f"{research_work_name} - for student {self.assignment.student.user.username} in semester - {self.semester}"

 


class File(models.Model):
    topic = models.ForeignKey(Topic, related_name='files', on_delete=models.CASCADE, null=True)
    submission = models.ForeignKey(Submission, related_name='files', on_delete=models.CASCADE, null=True)
    filename = models.FileField(upload_to='submissions/', null=True)
    upload_date = models.DateTimeField(auto_now_add=True)
    is_accepted = models.BooleanField(default=False)
    is_reviewed = models.BooleanField(default=False)
    comment = models.TextField(null=True, blank=True) 
     
    def __str__(self):
        return f"File: {self.filename.name} for Topic: {self.topic.name}"
    

Функция просмотра:

def admin_submission_details(request, sub_id):
    if request.user.is_authenticated:
        submission = get_object_or_404(Submission, pk=sub_id)
        topics = Topic.objects.filter(research_work=submission.research_work)
        topic_files = {topic: File.objects.filter(topic=topic, submission=submission) for topic in topics}
        context = {'submission':submission, 'topics':topics, 'topic_files':topic_files}
        return render(request, 'users/admin_submission_details.html', context=context)
    else:
        messages.error(request, 'Invalid user')
        return redirect('login') 

Шаблон:

{% block content %}
<div class="body flex-grow-1 px-3">
  <div class="container-lg">
    {% for topic, files in topic_files.items() %}
    <div class="card mb-4">
      <div class="card-header">
        <strong>{{topic.name}}</strong>
      </div>
      <div class="card-body">
        <div class="example">
          <div class="table table-responsive">
            <table class="table align-middle">
              <thead>
                <tr>
                  <td style="width: 20%" scope="col">Файл</td>
                  <td style="width: 20%" scope="col">Дата</td>
                  <td style="width: 20%" scope="col">Статус проверки</td>
                  <td style="width: 20%" scope="col">Комментарий</td>
                </tr>
              </thead>
              <tbody>
                {% for file in files %}
                <tr>
                  <td>
                    <a href="{{file.filename.url}}" target="_blank"
                      >{{ file.filename}}</a
                    >
                  </td>
                  <td>{{ file.upload_date|date:"Y-m-d H:i"}}</td>
                  {% if file.is_reviewed %} {% if file.is_accepted %}
                  <td style="color: green">Принято</td>
                  {% else %}
                  <td style="color: red">Не принято</td>
                  {% endif %} {% else %}
                  <td style="color: orange">На проверке</td>
                  {% endif %}
                  <td>{{file.comment}}</td>
                </tr>
                {% endfor %}
              </tbody>
            </table>
          </div>
          {% if not topic_files[topic] %}
          <div class="alert alert-warning" role="alert">
            No files uploaded for this topic yet.
          </div>
          {% endif %}
        </div>
      </div>
    </div>
    {% endfor %}
  </div>
</div>
<script>
  document.addEventListener("DOMContentLoaded", function () {
    const clickableRows = document.querySelectorAll(".clickable-row");
    clickableRows.forEach((row) => {
      row.addEventListener("click", function () {
        window.location.href = this.getAttribute("data-href");
      });
    });
  });
</script>
{% endblock content %} 

Когда я пытаюсь отобразить этот шаблон, я сталкиваюсь со следующей ошибкой:

django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '()' from 'topic_files.items()' 

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

В шаблонах Django вы не вызываете функции. Если элемент является вызываемым, шаблон вызовет его, без параметров, так:

{% for topic, files in topic_files.items %}
    <!-- … -->
{% endfor %}
Вернуться на верх