Tôi đang chạy truy vấn để nhận 5 mục News
mới nhất. Trong mẫu của tôi, tôi muốn hiển thị mục đầu tiên ở một vị trí, sau đó 4 mục còn lại ở phía dưới trang.Cách tốt nhất để cắt truy vấn Django mà không cần nhấn cơ sở dữ liệu nhiều hơn một lần
Trong mẫu của tôi, tôi làm điều gì đó như thế này:
{% for n in news|slice:":1" %}
{{ n.headline }}
{% endfor %}
... more HTML ...
{% for n in news|slice:"1:" %}
{{ n.headline }}
{% endfor %}
Khi tôi nhìn vào trong Toolbar Debug, kết quả này trong hai truy vấn cơ sở dữ liệu: một với LIMIT 1
và khác với LIMIT 4 OFFSET 1
, nhưng nếu không cùng . Tôi đánh giá cao đây là cách của Django thông minh chỉ yêu cầu những thứ bạn thực sự sử dụng, nhưng trong trường hợp này có vẻ hơi quá mức. Cách tốt nhất để làm điều này là gì?
Từ quan điểm của người lập trình, bạn chắc chắn đang gọi một vòng lặp 'for' hai lần và cả hai được đặt thành một mẫu gọi một truy vấn. Bạn có thể lấy tất cả 5 cùng một lúc, lưu trữ nó trên máy khách và hiển thị nội dung của một bản sao được lưu trong bộ nhớ cache thay vào đó không? – Droogans
tốt, đó là những gì tôi đang cố gắng làm. Theo quan điểm, tôi lấy tất cả 5, nhưng queryset chỉ đánh giá khi tôi cố gắng cắt đầu tiên 1. Bạn nói đúng, vòng lặp đầu tiên không thực sự cần phải là vòng lặp vì nó chỉ có 1 mục. –