#django #django-templates
#django #django-шаблоны
Вопрос:
В моем шаблоне Django у меня есть диаграмма, построенная из набора запросов, упорядоченная по убыванию score
, что-то вроде этого (без каких-либо тегов HTML):
{% for player in players %}
{{ forloop.counter }}. {{ player.name }} ({{ player.score }})
{% endfor %}
Однако, если у соседних игроков одинаковые оценки, я хочу, чтобы их позиции были одинаковыми, т.Е.:
1. Bob (100)
2=. Thelma (95)
2=. Terry (95)
4. Audrey (90)
Правильно ли я понимаю, что нет способа сделать это, используя стандартные теги шаблонов Django (я не использую Jinja)? Было бы лучшим способом перебрать набор запросов в представлении (или откуда бы он ни исходил) и вычислить эти позиции там, добавив их к каждому элементу, прежде чем они попадут в шаблон?
Ответ №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 %}
Комментарии:
1. Спасибо, я боялся, что это может быть так, просто подумал, что проверю. Иногда мне нравится простота шаблонов Django, иногда я хочу немного больше сложности!
2. КСТАТИ, @Brian, опечатка в строке 4 — должна быть
previous_player
.