You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板循环中对比前后项值的实现求助

问题修正:Django模板循环中仅首次显示重复员工姓名

需求:在Django模板的表格中,循环展示员工经历数据时,相同员工姓名仅在首次出现时显示,后续重复姓名的单元格留空。

原代码问题分析

  1. Model中department字段缺少models.前缀,会触发语法错误
  2. View未对数据按姓名排序,若相同姓名的记录不连续,无法实现预期效果
  3. Django模板不支持{% set var_name=0 %}和直接赋值{% varname=name.name%}的语法,需使用模板兼容的方式处理变量

修正后的代码

1. Model.py

from django.db import models

class Employee_experience(models.Model):
    emp_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50)
    desg = models.CharField(max_length=50)
    department = models.CharField(max_length=50)  # 补充models.前缀
    previous_company = models.CharField(max_length=50)
    experience_yrs = models.CharField(max_length=50)
    domain_worked = models.CharField(max_length=50)

2. View.py

from django.shortcuts import render
from .models import Employee_experience

def Exp_Employeewise(request):
    # 按姓名排序,确保相同姓名的记录连续排列
    emp_exp_list = Employee_experience.objects.all().order_by('name')
    context = {
        'emp_exp_list': emp_exp_list 
    } 
    return render(request, "Employee_Experience.html", context)

3. HTML模板(Employee_Experience.html)

<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>职位</th>
            <th>部门</th>
            <th>前公司</th>
            <th>工作年限</th>
            <th>工作领域</th>
        </tr>
    </thead>
    <tbody>
        {% with prev_name=None %}
            {% for emp in emp_exp_list %}
                <tr>
                    {% if emp.name != prev_name or forloop.first %}
                        <td>{{ emp.name }}</td>
                        {% with prev_name=emp.name %} {% endwith %}
                    {% else %}
                        <td></td>
                    {% endif %}
                    <td>{{ emp.desg }}</td>
                    <td>{{ emp.department }}</td>
                    <td>{{ emp.previous_company }}</td>
                    <td>{{ emp.experience_yrs }}</td>
                    <td>{{ emp.domain_worked }}</td>
                </tr>
            {% endfor %}
        {% endwith %}
    </tbody>
</table>

关键说明

  • 先在View中对数据按name排序,保证相同姓名的记录连续,这是实现效果的核心前提
  • 使用Django模板的{% with %}标签存储和更新上一个姓名的值,规避直接赋值的语法限制
  • 通过forloop.first处理循环首个元素,确保第一条记录的姓名正常显示

内容的提问来源于stack exchange,提问作者Sankar Narayanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:02:21