如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素

Posted

技术标签:

【中文标题】如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素【英文标题】:How can I count all elements in loop "for in" in Jinja2 templates Django 【发布时间】:2020-12-11 13:13:13 【问题描述】:

我尝试使用循环:

user_list = <QuerySet [<TableUsers: Jane>, <TableUsers: Kate>, <TableUsers: Jons>, <TableUsers: Jacob>, <TableUsers: Jane>, <TableUsers: Jons>, <TableUsers: Jane>]>
% for user in user_list %
  % if user.name == "Jane" %
    all_count_username_jane # this is all count user with name Jane
    user.name
  % elif user.name == "Jons" %
    all_count_username_jons # this is all count user with name Jons
    user.name
  % endif %
% endfor %

如何计算所有“Jane”和“Jons”?

【问题讨论】:

【参考方案1】:

如果你用过user_list = SomeModel.objects.all()之类的东西,你可以用类似的东西替换它

from django.db.models import Count

user_list = SomeModel.objects.values('name').annotate(count_names=Count('id'))

然后还将您的模板代码更改为:

% for user in user_list %
  % if user.name == "Jane" %
    user.count_names # this is all count user with name Jane
    user.name
  % elif user.name == "Jons" %
    user.count_names # this is all count user with name Jons
    user.name
  % endif %
% endfor %

【讨论】:

我用过:user_list = table_users_all.exclude(Q(user_status=1) | Q(user_status=2)).annotate(count_names=Count('id')) 但在模板中我看:> 1 简,1 简 > 1 琼,1 琼,1 琼, 你说得对!我在链接 djbook.ru/rel1.9/topics/db/aggregation.html 中更改了“注释”

以上是关于如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 jinja2/django 模板中任何变量的大小写?

带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?

如何在脚本中使用 django-template 而不是 jinja2?

如何调试 Jinja2 模板?

如何正确应用 django/jinja2 模板过滤器“转义”和“换行符”?

Jinja2 模板到 Django 模板