Django如何组合不同的上下文并将其传递给模板

2024-05-16 04:23:31 发布

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

我正在创建一个小的待办事项应用程序。我不知道如何在一个上下文中组合不同的上下文

下面您可以看到,我创建了三个返回不同值的上下文。第一个上下文按日期计算模型中的计划数。第二个上下文按天统计已完成计划的数量,第三个上下文统计计划状态=延迟

class DayStatsListView(ListView):
    model = Day
    queryset = Day.objects.all()
    context_object_name = 'all_plan_stats'
    template_name = 'project/stats.html'

    def get_context_data(self, **kwargs):
        context = super(DayStatsListView, self).get_context_data(**kwargs)
        # Counting Total Number of Plans by Day
        context['total_plans_count'] = Day.objects.annotate(num_of_plans=Count('plan')) \
            .values('num_of_plans', 'date', 'id') 

        # Counting is_completed=True Plans by Day
        context['num_of_completed_plans'] = Day.objects \
            .filter(plan__is_completed=True) \
            .annotate(num_of_completed_plans=Count('plan__is_completed')) \
            .values('num_of_completed_plans', 'id', 'date')

        # Counting status=deferred Plans by Day
        context['num_of_deferred_plans'] = Day.objects \
            .filter(plan__status='deferred') \
            .annotate(num_of_deferred_plans=Count('plan__is_completed')) \
            .values('num_of_deferred_plans', 'id', 'date')
        return context

型号

class Day(models.Model):
    date = models.DateField(default=datetime.date.today, unique=True)

class Plan(models.Model):
    title = models.CharField(max_length=255)
    status = models.CharField(max_length=255, choices=PLAN_STATUSES, null=True, default='upcoming')
    is_completed = models.BooleanField(default=False, null=True)

    day = models.ForeignKey(Day, CASCADE, null=True)

问题是如何将这3个上下文组合在一个上下文中,并将其传递给模板,以便轻松地对其进行forloop

我需要我的答案,这些查询应该在一个上下文中


Tags: oftruedateobjectsismodelscontextnum
1条回答
网友
1楼 · 发布于 2024-05-16 04:23:31

如果您只想在模板中遍历它们,那么只需创建一个键和所需值的字典,并将其作为上下文传递 例如

dict1={'num_of_deferred_plans':context['num_of_deferred_plans'],'num_of_completed_plans':context['num_of_completed_plans'],'total_plans_count':context['total_plans_count']}

return render(request, 'some.html', context=dict1 )

一旦你构建了这个,你现在有了一个dict,它在模板中是可编辑的。 您可以按如下方式执行此操作:

{% for key, value in dict1.items %}
    <tr>
        <td>{{key}}</td>
        <td>{{value}}</td>
    </tr>
{% endfor %}

相关问题 更多 >