Як обмежити сторону шаблону об’єктів списку, а не сторону подання


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 об’єкти / предмети. І як це зробити всередині шаблону. Заздалегідь спасибі.


Відповіді:


178

Існує 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 не зріз.
шквал

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 }}
Хусам

це більш повний приклад коду, ніж прийнята відповідь, це більш корисна відповідь, тому я підтримав і пояснюю, чому
Кіт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.