我目前正在尝试将列表的切片从 0 反转到 11
class Game(models.Model):
board = models.JSONField(default=list)
game = Game(board=[4] * 12, scores=[0, 0], current_player=0, game_over=False)
这是
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(元素数量)。您在这里将列表before传递给循环进行切片,因此循环甚至不知道它枚举了更大的列表。
我实际上建议在视图而不是模板中进行处理。在模板中编写业务逻辑并不是一个好习惯。通常它属于模型或视图。 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 %}