Làm cách nào để bạn giới hạn bên mẫu đối tượng danh sách, thay vì bên xem


83

Một trong những cách để giới hạn các đối tượng là thêm một giới hạn cho một hàm như thế này

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

Tuy nhiên, làm thế nào để bạn đạt được điều này bên trong một mẫu thay vì bên trong một khung nhìn?

Tôi biết bạn có thể lọc qua các đối tượng trong một mẫu và giới hạn ký tự nhưng làm cách nào để bạn thực sự giới hạn số lượng đối tượng được hiển thị trong một vòng lặp. Qua mẫu. ví dụ đoạn mã sau sẽ lặp qua tất cả các đối tượng ....

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

Làm thế nào để tôi phá vỡ vòng lặp, nói sau 3 đối tượng / mục đầu tiên. Và làm thế nào để tôi làm điều đó bên trong mẫu. Cảm ơn trước.


Câu trả lời:


178

Có một slicebộ lọc mà bạn có thể sử dụng trong các mẫu. Điều này hoạt động giống hệt như cắt trong chế độ xem.

{% for new in news|slice:":10" %}

2
Nếu bạn có một kịch bản mà bạn đang sử dụng {% for object in user.objects.all %} bạn có thể sử dụng{% for object in user.objects.all|slice:":10" %}
Samir Tendulkar

xin vui lòng cho tôi liên kết tài liệu lát của django.
squal

1
Nó được liên kết theo nghĩa đen từ câu trả lời của tôi ở trên.
Daniel Roseman,

Tôi đã nhận @Daniel đó. Tôi tìm kiếm slice trong kho lưu trữ github django nhưng tôi không tìm thấy slice_filter.
squal

12

Bạn muốn sử dụng bộ lọc mẫu lát cắt

Đây là ví dụ của bạn đã được thay đổi để sử dụng nó:

<ul>
{% for new in news|slice:":3" %}
<li>
<p>{{ new.title }}</p>
<p>{{ new.body }}</p>
</li>
{% endfor %}
</ul>

1
Tôi biết tôi hơi cằn nhằn, nhưng nó phải như vậy: {{ new.title}}{{ new.body }}
Hussam,

đây là một ví dụ mã hoàn chỉnh hơn câu trả lời được chấp nhận, đây là một câu trả lời hữu ích hơn, vì vậy tôi bỏ phiếu tán và đang giải thích lý do tại sao
Keith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.