Как посчитать вхождения в списке с помощью шаблонных фильтров в django и передать их в шаблон - PullRequest
1 голос
/ 25 апреля 2019

У меня есть приложение django, в котором я считаю подсчитанные URL-адреса. Я сохраняю кликнул URL в списке в моем представлении. Теперь я хочу перебрать список и посчитать каждый случай (из URL). Затем я хочу показать каждый URL с подсчитанным числом в шаблоне. То, что я делаю до сих пор, выглядит так:

Мой взгляд:

class AnalyticsIndexView(StaffRequiredMixin, ListView):
  template_name = 'analytics_list.html'
  model = UrlTime

  def get_context_data(self, **kwargs):
    context = super(AnalyticsIndexView, self).get_context_data(**kwargs)
    context['url_views_list'] = UrlTime.objects.all()
    context['total_views'] = UrlTime.objects.all().count

    context['home_view'] = UrlTime.objects.filter(associated_url='/').count()
    context['job_list'] = UrlTime.objects.filter(associated_url='/jobs/').count()
    context['job_detail'] = UrlTime.objects.filter(associated_url='/jobs/{How to pass id??}').count()
    context['job_'] = UrlTime.objects.filter(associated_url='/jobs/{???id?????}').count()

    return context

Теперь это работает. Но я не хочу жестко кодировать ссылки, очевидно, также потому, что я не знаю, какие URL будут в нем. (это обрабатывает мое специальное промежуточное ПО). Я хотел бы захватить каждый URL-адрес в списке, подсчитать его и показать ссылку и ссылочный счет в шаблоне. Я уже пробовал с коллекциями, но это не сработало, как я хотел. Кроме того, я не знаю, как это сделать со ссылками, имеющими динамический идентификатор ....

У кого-нибудь есть предложения? Помощь очень ценится. Спасибо!

1 Ответ

1 голос
/ 25 апреля 2019

Вам нужно выполнить агрегацию GroupBy и Count . Попробуйте переопределить метод get_query_set с помощью следующего запроса:

def get_queryset():
    return UrlTime.objects.values('associated_url').annotate(
        url_count=Count('associated_url')
    )
...