Django模板中具有相同位置的编号列表?

时间:2016-10-11 15:37:24

标签: django django-templates

在我的Django模板中,我有一个从QuerySet构建的图表,按def cvt(ustring): l = [] for uc in ustring: l.append(chr(ord(uc) & 0xFF)) # low order byte l.append(chr((ord(uc) >> 8) & 0xFF)) # high order byte return ''.join(l) cvt(my_string) 'WAGCenter-04190517953516060503-20160605124857-4190-5' 递减排序,类似这样(省略任何HTML标记):

score

但是,如果相邻的球员得分相等,我希望他们的位置相同,即:

{% for player in players %}
    {{ forloop.counter }}. {{ player.name }} ({{ player.score }})
{% endfor %}

我是否认为使用Django的标准模板标签(我不使用Jinja)无法做到这一点?最好的方法是在视图中(或者它来自何处)遍历QuerySet并在那里计算这些位置,在它们到达模板之前将它们添加到每个项目中?

1 个答案:

答案 0 :(得分:1)

这似乎更像是在视图中处理的事情:

players = your_queryset
ordered_players = []
counter = 1
previous_player = PlayerModel.objects.none()
for player in players.order_by("score"):
  if player.score == previous_player.score:
    position = previous_player.position
  else:
    position = counter
  ordered_players.append({
    "position": position, 
    "name": player.name,
    "score": player.score
  })
  previous_player = player
  counter += 1
return render(request, "template.html", {"players": ordered_players})

模板:

{% for player in players %}
    {{ player.position }}. {{ player.name }} ({{ player.score }})
{% endfor %}