Недопустимый блочный тег в строке 126: 'set', ожидалось 'empty' или 'endfor'. Вы забыли зарегистрировать или загрузить этот тег?

Я хочу использовать {% set ... }, но у него есть проблема - django.template.exceptions.TemplateSyntaxError: Недопустимый блочный тег в строке 126: 'set', ожидается 'empty' или 'endfor'. Вы забыли зарегистрировать или загрузить этот тег?

что мне делать?

html файл

<div class="carousel-inner">
   {% for knowledge in knowledges %}
       {% set count = 0 %}
       {% for photo in photo01s %}
           {% if photo.category01 == knowledge %}
           {% set count = count + 1 %}
                <div class="carousel-item {% if forloop.first %}active{% endif %}">
                    <div class="row">
                        <div class="card" style="background-image: url('{{ photo.image01.url }}');"></div>
                    </div>
                </div>
            {% endif %}
        {% endfor %}
     {% endfor %}
</div>                

models.py

class Knowledge(models.Model):
    name01 = models.CharField(max_length=100, null=False, blank=False)

    def __str__(self):
        return self.name01

class Photo01(models.Model):
    category01 = models.ForeignKey(Knowledge, on_delete=models.SET_NULL, null=True, blank=True)
    image01 = models.ImageField(null=False, blank=False)
    description01 = models.TextField()
    title01 = models.CharField(max_length=100, default='')

    def __str__(self):
        return self.title01

views.py

def knowledge01(request):
    knowledges = Knowledge.objects.all()
    photo01s = Photo01.objects.all()

    context = {'knowledges': knowledges, 'photo01s': photo01s}
    return render(request, 'photos/knowledge01.html', context)

Я пробовал несколько способов, но ничего не получается.

Не выполняйте "join" в шаблоне. Шаблоны должны реализовывать логику рендеринга, а не бизнес-логику, а шаблоны, как известно, медленные, и поэтому это будет работать не очень эффективно.

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

Мы можем предварительно получить изображения в представлении:

def knowledge01(request):
    knowledges = Knowledge.objects.prefetch_related('photo01_set')

    context = {'knowledges': knowledges}
    return render(request, 'photos/knowledge01.html', context)
<div class="carousel-inner">
   {% for knowledge in knowledges %}
       {% for photo in knowledge.photo01_set.all %}
           <div class="carousel-item {% if forloop.first %}active{% endif %}">
                    <div class="row">
                        <div class="card" style="background-image: url('{{ photo.image01.url }}');"></div>
                    </div>
                </div>
        {% endfor %}
     {% endfor %}
</div>

Note: Specifying null=False [Django-doc] is not necessary: fields are by default not NULLable.


Note: Specifying blank=False [Django-doc] is not necessary: fields are by default not blank and thus are required by a form.

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