Django类视图如何将内部方法返回值传入模板实现循环渲染
Django 类视图内自定义数据传递到模板实现表格渲染的故障问题
场景说明
- 项目dashboard模块路由直接绑定类视图的
as_view()方法,配置为:path('dashboard/', DashboardView.as_view(), name='dashboard') - 绑定的
DashboardView继承自LoginRequiredMixin、TemplateView,指定渲染模板为dashboard.html。 - 目标是基于列表
['hola','chau','como','va']的值,在模板的表格中逐行循环渲染内容。
现有实现与故障表现
- 已验证:将列表数据获取与上下文传递逻辑写成独立函数式视图时,可正常完成表格渲染,对应可运行代码为:
def get_test(request): a = ['hola','chau','como','va'] return render(request, 'test.html', {'name': a}) - 故障表现:将同逻辑迁移到
DashboardView类内部作为类方法编写时,无法正常触发模板内的表格循环渲染。
当前故障版本的类视图代码
# Views.py class DashboardView(LoginRequiredMixin, TemplateView): template_name = 'dashboard.html' def get_graph_sales_year_month(self): data = [] try: year = datetime.now().year for m in range(1, 13): total = Sale.objects.filter(date_joined__year=year, date_joined__month=m).aggregate( r=Coalesce(Sum('iva'), 0)).get('r') data.append(float(total)) except: pass return data # 类内已存在大量依赖self调用的自定义业务方法 def get_test(request): a = ['hola','chau','como','va'] return render(request, 'dashboard.html', {'name': a})
模板表格代码
<div class="table-responsive"> <table class="table table-striped"> <thead> <tr> <th><span>Date</span></th> </tr> </thead> <tbody> {% for i in name %} <tr> <td><span>{{i}}</span></td> </tr> {% endfor %} </tbody> </table> </div>
实现要求
- 不修改现有dashboard路由的绑定配置,保持
DashboardView.as_view()的入口方式。 - 将列表数据获取逻辑迁移到类视图内部,正确把类内自定义方法的返回值注入模板上下文,实现和独立函数视图完全一致的逐行表格渲染效果。
- 兼容类内已有的大量依赖
self调用的自定义业务方法,不破坏现有业务逻辑。
内容的提问来源于stack exchange,提问作者Silvio Aranda
相关产品推荐
相关产品推荐

