第 126 行的块标记无效:“set”,应为“empty”或“endfor”。您是否忘记注册或加载此标签?

问题描述 投票:0回答:1

我想使用 {% 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>                

模型.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)

我尝试了多种方法,但都不起作用。

html django django-models
1个回答
0
投票

不要在模板中执行“join”。模板应该实现渲染逻辑,而不是业务逻辑,而模板的速度非常慢,因此工作效率不高。

其次,您的模板不使用任何软件,因此设置此变量也没有多大意义。我假设模板是由聊天机器人生成的,因为聊天机器人经常在模板中执行变量赋值,更糟糕的是,“弥补”不存在的模板标签。

我们可以在视图中预取图像:

count

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>

 
[Django-doc] 不是必需的:字段默认情况下不可为 NULL。


注意

:指定 null=False

 
[Django-doc] 不是必需的:字段默认情况下不为空,因此是表单所必需的。

© www.soinside.com 2019 - 2024. All rights reserved.