2016-10-11 3 views
0

私はクエリセットから作成されたグラフを持っているが、(任意のHTMLタグを省略)、scoreによって降順このような何かを注文しました:Djangoテンプレートのいくつかの位置が等しい番号付きリスト?私のDjangoテンプレートで

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

しかし、隣接するプレイヤーが同じスコアを持っている場合、私は彼らのポジションが欲しいですすなわち、同じように:

1. Bob (100) 
2=. Thelma (95) 
2=. Terry (95) 
4. Audrey (90) 

私は右(私は神社を使用していない)、この使用してDjangoの標準のテンプレートタグを行うための方法はありません思考にいますか?最良の方法は、ビュー内(またはどこから来ても)のQuerySetをループして、そこにあるこれらの位置を計算し、テンプレートに到達する前に各項目に追加することですか?

答えて

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 %} 
+0

おかげで、私はそれが事実であるかもしれない恐れ、ちょうど私がチェックしようと思いました。時々私はDjangoのテンプレートのシンプルさが好きですが、他の時代はもっと複雑になりたいです! –

+0

BTW @Brian、4行目の誤植は 'previous_player'でなければなりません。 –

関連する問題