我想使用 {% 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)
我尝试了多种方法,但都不起作用。
不要在模板中执行“join”。模板应该实现渲染逻辑,而不是业务逻辑,而模板的速度非常慢,因此工作效率不高。
其次,您的模板不使用任何软件,因此设置此变量也没有多大意义。我假设模板是由聊天机器人生成的,因为聊天机器人经常在模板中执行变量赋值,更糟糕的是,“弥补”不存在的模板标签。
我们可以在视图中预取图像:count
def knowledge01(request):
knowledges = Knowledge.objects.prefetch_related('photo01_set')
context = {'knowledges': knowledges}
return render(request, 'photos/knowledge01.html', context)
注意[Django-doc] 不是必需的:字段默认情况下不可为 NULL。
注意:指定
null=False
[Django-doc] 不是必需的:字段默认情况下不为空,因此是表单所必需的。