如何在Django 4.0的ListView类视图中传递变量
解决Django ListView传递员工总数到模板的问题
Django类视图中,直接定义的类属性不会自动传入模板上下文,需要通过重写get_context_data方法来添加自定义变量。以下是修正后的代码:
修改Views.py
from django.views.generic import ListView from django.db.models import Count from .models import Funcionarios class ListaFuncionariosView(ListView): model = Funcionarios template_name = '../templates/funcionarios/lista_funcionarios.html' paginate_by = 10 ordering = ['FuncionarioCartao'] queryset = Funcionarios.objects.filter(EmpresaCodigo=1) def get_context_data(self, **kwargs): # 获取父类生成的默认上下文 context = super().get_context_data(**kwargs) # 基于已过滤的queryset统计员工总数,避免重复查询 context['funcionarios_number'] = self.queryset.aggregate(total=Count('FuncionarioCartao'))['total'] return context
模板说明
你的HTML代码无需大幅修改,现在{{ funcionarios_number }}会直接显示过滤后的员工总数(整数格式):
<h1>Good Morning</h1> Exists: {{ funcionarios_number }} <br> {{ funcionarios }}
关键说明
- 直接在类中定义的
funcionarios_number不会被自动加入模板上下文,必须通过get_context_data方法注入。 - 使用
self.queryset进行统计,复用已过滤的查询集,减少数据库查询次数,提升性能。
内容的提问来源于stack exchange,提问作者Gustavo Cavasotto
相关产品推荐
相关产品推荐

