Django模板循环中对比前后项值的实现求助
问题修正:Django模板循环中仅首次显示重复员工姓名
需求:在Django模板的表格中,循环展示员工经历数据时,相同员工姓名仅在首次出现时显示,后续重复姓名的单元格留空。
原代码问题分析
- Model中
department字段缺少models.前缀,会触发语法错误 - View未对数据按姓名排序,若相同姓名的记录不连续,无法实现预期效果
- 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
相关产品推荐
相关产品推荐

