Django перевернутая нарезка циклов

В настоящее время я пытаюсь развернуть фрагмент списка от 0 до 11

Вот часть index.html

<div>
    {% for i in game.board|slice:"6:12" reversed%}
        <a href="{% url 'make_move' forloop.counter0 %}" > {{ i }} </a>
    {% endfor %}
</div>

Вот что у меня есть в views.py

def make_move(request, pit):

    print(f"Make move called. Pit: {pit}")

pit всегда будет печатать от 0 до 5, когда я ожидаю, что он будет печатать 11, 10, 9 и т.д.

Чувствуется, что slice и reversed не влияют на i в данном случае

Цикл counter всегда начинается с 0 и доходит до n, количества элементов. Здесь вы нарезаете список перед передачей его в цикл, так что цикл даже не знает, что перечисляет больший список.

Вообще-то я бы посоветовал выполнять обработку в view, а не в шаблоне. Не стоит писать бизнес-логику в шаблоне. Обычно она находится в модели или в представлении. Язык шаблонов Django намеренно ограничен, чтобы не позволить людям писать такую логику в шаблоне.

Таким образом, в представлении мы можем работать с:

from django.shortcuts import get_object_or_404


def my_view(request, gid):
    game = get_object_or_404(Game, pk=gid)
    game_board = [
        [(i, game.board[i]) for i in range(j + 3, j - 1, -1)]
        for j in range(0, 12, 6)
    ]
    return render(request, 'index.html', {'game': game, 'game_board': game_board})

и в шаблоне:

{% for row in game_board %}
<div>
    {% for idx, j in row %}
        <a href="{% url 'make_move' idx %}" > {{ j }} </a>
    {% endfor %}
</div>
{% endfor %}
Вернуться на верх