Как разбить набор запросов Django в шаблоне, а затем выполнить итерацию?

скажем, мой взгляд выглядит так:

def index(request):
    posts = Post.objects.all()
    return render(request, 'myapp/index.html', {'posts' : posts})

Я хочу сделать что-то вроде этого:

index.html

<div>
    {% for post in posts[:3] %}
        <p>{{post.text}}</p>
    {% endfor %}
</div>

<div>
    {% for post in posts[3:6] %}
        <p>{{post.text}}</p>
    {% endfor %}
</div>

Короче говоря, я хочу разбить свой набор запросов на более мелкие группы по 3, а затем перебрать их. Есть ли простой способ сделать это?


person darkhorse    schedule 09.03.2016    source источник
comment
Я не уверен, что этот тип нарезки работает в шаблонах. Вам нужно будет использовать фильтр slice.   -  person AKS    schedule 09.03.2016


Ответы (1)


Вы можете использовать forloop.counter и divisibleby, чтобы выполнить это:

<div>
    {% for post in posts %}
        <p>{{post.text}}</p>
        {% if forloop.counter|divisibleby:3 %}
            </div><div>
        {% endfor %}
    {% endfor %}
</div>

В качестве альтернативы рассмотрите возможность разделения набора запросов на группы в представлении и передачи групп в шаблон в качестве новой переменной контекста.

person rnevius    schedule 09.03.2016