Bạn sẽ cần phải làm gì đó phức tạp hơn đằng sau hậu trường. Và xin lưu ý rằng trong khi tôi là một dev python, tôi đã sử dụng werkzeug và jinja2 trong một thời gian dài bây giờ và do đó cú pháp django của tôi là một chút gỉ. Ngoài ra điều này đã được mã hóa khô (như trong tôi chỉ cần gõ nó ở đây trong trình duyệt) và cần được kiểm tra để đảm bảo rằng nó hoạt động như dự định.
Nói chung tôi sẽ tạo đối tượng phân trang và chuyển đối tượng đó vào đối tượng truy vấn không được lọc theo trang, bạn cũng có thể cho biết số trang trên mỗi trang và trang bạn đang truy cập.
Vì vậy, một cái gì đó mơ hồ tương tự như:
Paginator(query, objects_per_page, current_page_number)
Và sau đó vượt qua các kết quả đối tượng paginator vào mẫu.
Bên init của paginator bạn muốn làm điều gì đó tương tự như:
def __init__(self, query, objects_per_page, current_page_number):
self.total = query.count()
self.per_page = objects_per_page
self.current_page_number = current_page_number
self.lower_limit = objects_per_page * current_page_number
self.upper_limit = objects_per_page * (current_page_number + 1)
if self.upper_limit > self.total:
self.upper_limit = self.total
self.objects = query[self.lower_limit - 1:self.upper_limit - 1]
Sau đó, trong mẫu mà bạn muốn làm điều gì đó như
Showing {{paginator.lower_limit}}-{{paginator.upper_limit}} of {{paginator.total}}
Và sau khi bạn đã sẵn sàng để lặp qua các đối tượng bạn chỉ có thể lặp qua paginator.objects.
Tôi hy vọng cung cấp cho bạn ý tưởng chung về cách bạn có thể làm điều này một cách rõ ràng.
Nguồn
2009-11-06 18:29:52
whoa! đây chính là điều tôi đang tìm kiếm. cảm ơn! – webgonewild
Điều này rất hữu ích - cảm ơn. Chỉ lưu ý rằng tôi sẽ có là mặc định trong một 'ListView' đối tượng được gọi là' page_obj' thay vì 'page'. – BigglesZX