2009-06-14 51 views
25

Đây là hy vọng một cách nhanh chóng/dễ dàng. Tôi biết một cách để làm việc này thông qua một thẻ mẫu tùy chỉnh, nhưng tôi đã tò mò nếu có những phương pháp khác tôi đã qua tìm kiếm. Tôi đã tạo ra một chức năng bộ sưu tập của các loại cho blog của tôi, và tôi có một trang danh sách thư viện để phân trang tất cả các thư viện của tôi. Bây giờ, tôi không muốn hiển thị tất cả ảnh của mỗi thư viện trong danh sách đó, vì nếu mỗi thư viện thậm chí có 20 hình ảnh, thì đó là 100 hình ảnh trên một trang nếu tôi phân trang ở 5 bài đăng. Đó sẽ là lãng phí, và cách sai lầm để đi về mọi thứ.django cho ngắt truy cập vòng lặp

Câu hỏi tôi có là, có cách nào để chỉ hiển thị 3 ảnh từ bộ ảnh không? Những gì tôi muốn làm, nhưng tôi không nghĩ có thể là một cái gì đó tương tự (giả):

{% for photos in gallery.photo_set %} 
    {% if forloop.counter lt 3 %} 
    <img src="{{ photos.url }}"> 
    {% endif %} 
{% endfor %} 

Đánh giá từ các tài liệu, trừ khi tôi đang hoàn toàn thiếu nó, đó là không thể thực hiện thông qua hệ thống templating. Do đó, tôi chỉ có thể viết các thẻ mẫu của riêng mình để làm việc xung quanh nó. Tôi có lẽ có thể làm một cái gì đó từ khía cạnh xem, nhưng tôi đã không nhìn xa vào ý tưởng đó. Tùy chọn khác mà tôi có là tạo mô hình cho trường xem trước và cho phép người dùng chọn ảnh mà họ muốn trong trường xem trước.

Dù sao, một vài tùy chọn khác nhau, vì vậy tôi nghĩ tôi sẽ thăm dò ý kiến ​​của khán giả xem bạn sẽ làm như thế nào. Bất kỳ ý kiến ​​được đánh giá cao. Cá nhân, thưởng thức rằng có rất nhiều cách để da mèo này.

Trả lời

69

Sử dụng:

{% for photos in gallery.photo_set|slice:":3" %} 
+2

Vì vậy, có tất cả các tùy chọn của tôi và sau đó có một lựa chọn rõ ràng của bạn mà tôi đã xem. Cảm ơn cho tip, giúp tôi tiết kiệm rất nhiều rắc rối! – f4nt

+3

Sử dụng bộ lọc lát cắt có một lợi ích bổ sung. Nếu bạn đang đi qua một bộ truy vấn Django (trái ngược với một bộ sưu tập), slice sẽ chuyển qua truy vấn SQL cơ bản, giới hạn số hàng mà trang sẽ truyền tải từ cơ sở dữ liệu. –

+0

@Dave, +1: cảm ơn, tôi không biết về tối ưu hóa đó - tuyệt vời! –

1

này là tốt hơn thực hiện trong bộ sưu tập gallery.photo_set. Chữ "3" cứng trong mẫu là một ý tưởng tồi trong thời gian dài.

class Gallery(object): 
    def photo_subset(self): 
     return Photo.objects.filter(gallery_id = self.id)[:3] 

Trong chức năng chế độ xem của bạn, bạn có thể làm những việc như chọn 3 ảnh ngẫu nhiên hoặc 3 ảnh gần đây nhất.

def photo_recent(self): 
     return Photo.objects.filter(gallery_id = self.id).orderby(someDate)[:3] 

    def photo_random(self): 
     pix = Photo.objects.filter(gallery_id = self.id).all() 
     random.shuffle(pix) 
     return pix[:3] 
+0

Thực ra, vì 3 đã làm với bản trình bày nó phù hợp trong mẫu, các mẫu khác có thể có nhiều không gian hơn và muốn trình bày 4 ảnh, phải không? – noio

+0

@Noio: Việc nhóm các ảnh thành danh sách các danh sách phải ở trong chức năng xem. Mẫu chỉ lấy danh sách các danh sách và hiển thị chúng. –

+1

lott thật lạ lùng khi bạn bảo anh ta không phải "mã cứng" một hằng số trong khuôn mẫu, nhưng sau đó cung cấp một ví dụ về cùng một hằng số đó trong mã máy chủ. Đây là lời khuyên khủng khiếp - mẫu là chính xác nơi bạn muốn đặt một biến có thể thay đổi dựa trên những thay đổi thiết kế. –

Các vấn đề liên quan