Как ограничить список объектов на стороне шаблона, а не на стороне просмотра

83

Один из способов ограничить объекты - добавить ограничение к такой функции.

def ten_objects():
    obj = Model.objects.all()[0:10]  # limit to 10
    return {'objects': obj}

Однако как этого добиться внутри шаблона, а не внутри представления?

Я знаю, что вы можете фильтровать объекты в шаблоне и ограничивать количество символов, но как вы на самом деле ограничиваете количество объектов, отображаемых в цикле. Через шаблон. например, следующий код будет перебирать все объекты ....

    <ul>
     {% for new in news %}
      <li>
       <p>{{ news.title }}</p>
       <p>{{ news.body }}</p>
      </li>
     {% endfor %}
    </ul>

Как мне разорвать цикл, скажем, после первых 3 объектов / предметов. И как мне это сделать внутри шаблона. Заранее спасибо.

Стю
источник
1
<a href=" docs.djangoproject.com/en/dev/ref/templates/builtins/#slice "> slice</a>
Игнасио Васкес-Абрамс,

Ответы:

180

Есть sliceфильтр, который можно использовать в шаблонах. Это работает точно так же, как нарезка в пределах вида.

{% for new in news|slice:":10" %}
Дэниел Розман
источник
2
Если у вас есть сценарий, который вы используете, {% for object in user.objects.all %} вы можете использовать{% for object in user.objects.all|slice:":10" %}
Самир Тендулкар
пожалуйста, дайте мне ссылку на документацию по django.
шквал
1
Это буквально связано с моим ответом выше.
Дэниел Роузман,
Я получил этот @Daniel. Я ищу срез в репозитории github django, но обнаружил, что slice_filter не срез.
Squal
Работаю на меня.
bhattraideb
12

Вы хотите использовать фильтр шаблона среза

Вот ваш пример, измененный для его использования:

<ul>
{% for new in news|slice:":3" %}
<li>
<p>{{ new.title }}</p>
<p>{{ new.body }}</p>
</li>
{% endfor %}
</ul>
Крис Хейзель
источник
1
Я знаю, что я немного придираюсь, но так должно быть: {{ new.title}}и {{ new.body }}
Хусам
это более полный пример кода, чем принятый ответ, это более полезный ответ, поэтому я проголосовал за и объясняю, почему
Кейт