Django Как объединить разные контексты и передать его в шаблон - PullRequest
2 голосов
/ 01 марта 2020

Я создаю небольшое приложение ToDo. Я не знаю, как объединить разные контексты в одном контексте.

Ниже Вы можете видеть, что я создал три контекста, которые возвращают разные значения. Первый контекст подсчитывает количество планов по дате модели дня. Второй контекст подсчитывает количество выполненных планов по дням, а третий контекст подсчитывает статус планов = отложено

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 контекста в одном контексте и передаю его в шаблон, чтобы я мог легко перенаправить его на oop.

Мне нужно, чтобы эти запросы были в одном контексте

1 Ответ

0 голосов
/ 01 марта 2020

Если вы просто хотите просмотреть их в шаблоне, просто создайте словарь ключей и значений, которые вы хотите, и передайте его в качестве контекста. Например:

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 )

После того, как вы сконструировали это теперь у вас есть слово, которое повторяется в шаблонах. Вы можете сделать это следующим образом:

{% for key, value in dict1.items %}
    <tr>
        <td>{{key}}</td>
        <td>{{value}}</td>
    </tr>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...