如何使用Django模板中的if条件消除重复数据?

2024-07-02 12:21:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在模板或html中使用if条件来消除重复数据可以吗

注意:在我的视图中,我已经有了不同的核心,但因为我在1<;tr>它复制了一些数据

这是我的html

{% for core in cores %}
    {% for behavior in behaviors %}
        {% if core.Grading_Behavior__Grading_Behavior__Name == behavior.Grading_Behavior__Grading_Behavior__Name %}
            <tr>
                <td rowspan="2" colspan="4" class="tblcoretitle">{{core.Grading_Behavior__Grading_Behavior__Name}} 1</td>
                {% if core.Grading_Behavior__Grading_Behavior__GroupName == behavior.Grading_Behavior__Grading_Behavior__GroupName  %}
                    <td colspan="4" class="tblcore"> {{behavior.Grading_Behavior__Grading_Behavior__GroupName}}
                    </td>
                {% else %}
                {% endif %}
                <td class="tblcore">1</td>
                <td class="tblcore">2</td>
                <td class="tblcore">3</td>
                <td class="tblcore">4</td>
            </tr>
            <tr>
                {% if core.Grading_Behavior__Grading_Behavior__GroupName == behavior.Grading_Behavior__Grading_Behavior__GroupName  %}
                {% else %}
                    <td colspan="4" class="tblcore">{{behavior.Grading_Behavior__Grading_Behavior__GroupName}}
                    </td>
                {% endif %}
            </tr>
        {% endif %}
    {% endfor %}
{% endfor %}

这是我的观点

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__Name')\
    .order_by('Grading_Behavior__Grading_Behavior__Name')


behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).filter().values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__GroupName')\
    .order_by('Grading_Behavior__Grading_Behavior__GroupName')

这是我目前的结果

enter image description here

这是我想要的结果

enter image description here

如果你有更好的解决方案或想法,请分享你的答案

更新

当我在视图中尝试此操作时

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values(
        'Grading_Behavior__Grading_Behavior__Name', 'Grading_Behavior__Grading_Behavior__GroupName').distinct(
        'Grading_Behavior__Grading_Behavior__Name') \
        .order_by('Grading_Behavior__Grading_Behavior__Name')

    behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
        .filter(Students_Enrollment_Records__in=Students.values_list('id')).values(
        'Grading_Behavior__Grading_Behavior__Name', 'Grading_Behavior__Grading_Behavior__GroupName').distinct(
        'Grading_Behavior__Grading_Behavior__GroupName') \
        .order_by('Grading_Behavior__Grading_Behavior__GroupName')

    matches = cores.union(behaviors)

我的html

    {% for match in matches %}
        <tr>
            <td rowspan="2" colspan="4" class="tblcoretitle">{{match.Grading_Behavior__Grading_Behavior__Name}} 1</td>
        </tr>
        <tr>
            <td colspan="4" class="tblcore">{{match.Grading_Behavior__Grading_Behavior__GroupName}}</td>
            <td class="tblcore">1</td>
            <td class="tblcore">2</td>
            <td class="tblcore">3</td>
            <td class="tblcore">4</td>
        </tr>
    {% endfor %}

结果是:

enter image description here

它复制了核心价值观

我们要解决这个问题,伙计,再调整一下。先谢谢你

再次更新

当我使用

matches = itertools.chain(cores, behaviors)

结果是

enter image description here


Tags: nameincorefiltercorestrclasstd
1条回答
网友
1楼 · 发布于 2024-07-02 12:21:04

既然在同一个对象中使用了两个过滤器,为什么不合并它们以避免重复,并在模板中使用两个for循环呢

import itertools

cores = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
            .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__Name')\
        .order_by('Grading_Behavior__Grading_Behavior__Name')


behaviors = StudentsBehaviorGrades.objects.filter(Teacher=teacher) \
            .filter(Students_Enrollment_Records__in=Students.values_list('id')).values('Grading_Behavior__Grading_Behavior__Name','Grading_Behavior__Grading_Behavior__GroupName').distinct('Grading_Behavior__Grading_Behavior__GroupName')\
        .order_by('Grading_Behavior__Grading_Behavior__GroupName')

matches = itertools.chain(cores, behaviors)

相关问题 更多 >