我正在使用Django,我想知道是否有办法修改下面的标记,以便在满足特定条件后停止迭代for循环?

webpage.html
<div>
{% for person in crew.crew_set.all %}
   {% if person.job|stringformat:'s' == 'Supervisor'  %}
       <div>Supervisor</div>
   {% endif %}
{% endfor %}
</div>

上面的代码导致"Supervisor"被写入50次.我可以合并这两个标记,或者使用Break语句,这样"Supervisor"只列出一次吗?

我没有列出我的模型/视图,因为我只是想更好地理解如何在我的html页面上使用标签.

Details:

Models.py

class Person(models.Model):
    name = models.CharField(max_length=200)

class Jobs(models.Model):
    jobcode = models.CharField(max_length=5)
    name = models.CharField(max_length=200)

class Crew(models.Model):
    jobnumber = models.ForeignKey(Jobs, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    role = models.CharField(max_length=200)

Views.py

class PersonPageView(DetailView):
    model = Person
    queryset = Person.objects.prefetch_related(
        Prefetch('jobs_set', Jobs.objects.select_related('jobnumber')),
        Prefetch('crew_set', Crew.objects.select_related('person'))
    )
    template_name = '_person_info.html'

推荐答案

don't人在模板中这样做.模板应该用于实现rendering逻辑,而不是business logic.模板效率不是很高,但也故意缺乏各种工具来阻止人们这样做.

你可以使用一个Exists子查询来判断这个,这也会提高效率:

from django.db.models import Exists, OuterRef


class PersonPageView(DetailView):
    model = Person
    queryset = Person.objects.prefetch_related(
        Prefetch('jobs_set', Jobs.objects.select_related('jobnumber')),
        Prefetch('crew_set', Crew.objects.select_related('person')),
    ).annotate(
        is_supervisor=Exists(
            Crew.objects.filter(person_id=OuterRef('pk'), role='Supervisor')
        )
    )
    template_name = '_person_info.html'

然后,person将有一个额外的属性.is_supervisor,因此您可以使用:

{% if person.is_supervisor %}
    …
{% endif %}

Html相关问答推荐

Flexbox响应式图像不会缩小

Bootstrap右和左颈部

将文本区域标签的内容着色为SON(带有 colored颜色 )

在 Select 前后更改选项卡的背景

如何使用css为动态用户输入矩阵添加背景色?

选中/取消选中带有_hyperscript的多个复选框

邮箱追踪器-有效,但在Gmail客户端中是否可以显示问号图标以外的其他内容?

创建带有弯曲边框的水平时间线

如何在将文本垂直居中的同时将文本右对齐?

在网页上的 Select 器中显示选项时出现问题:未在GO模板中传递循环{{range}}的数据

轨道上的居中范围滑块拇指(Webkit)

从网页中提取URL

如何使用css创建六边形棋盘?

多次使用组件时计数Angular 14中嵌套数组的指令

太多的 Web 视图实例导致手机过热 Swift

MUI 日期 Select 器要包含的日期

如何在 svelte 中对静态 html 文件使用href=

为什么相同持续时间的转换需要不同的时间?

如何使用 :hover zoom 重叠图像?

尽管设置了 width:100% left:0,但居中对齐的 CSS 动画并不对称