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