在我的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并在那里计算这些位置,在它们到达模板之前将它们添加到每个项目中?
答案 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 %}