Django 反转 for 循环切片

问题描述 投票:0回答:1

我目前正在尝试将列表的切片从 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
没有影响

python django slice reverse
1个回答
0
投票

循环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 %}
© www.soinside.com 2019 - 2024. All rights reserved.