2009-06-14 9 views
25

Jest to, miejmy nadzieję, szybki/łatwy. Znam sposób obejścia tego poprzez niestandardowy tag szablonu, ale byłem ciekawy, czy były inne metody, których szukałem. Na moim blogu utworzyłem funkcję sortowania galerii i mam stronę z listą galerii, która dzieli strony na wszystkie moje galerie. Teraz nie chcę pokazywać wszystkich zdjęć z każdej galerii na tej liście, ponieważ jeśli każda galeria ma nawet 20 obrazów, to jest to 100 obrazów na stronie, jeśli będę w paginacji w 5 postach. To byłoby marnotrawstwem i niewłaściwym sposobem postępowania.django do przerwania zliczania pętli

Mam pytanie, czy istnieje sposób na wyświetlenie 3 zdjęć z zestawu zdjęć? Co chciałbym zrobić, ale nie wiem myśleć to możliwe jest coś takiego jak (Pseudokod):

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

Sądząc z dokumentacji, chyba że całkowicie brakuje mi go, że nie jest możliwe za pośrednictwem system szablonów. W związku z tym mogę po prostu napisać własny tag szablonów do obejścia go. Prawdopodobnie mógłbym zrobić coś z perspektywy widoku, ale nie wpadłem na to daleko. Inną dostępną opcją jest udostępnienie modelowi pola podglądu i umożliwienie użytkownikowi wybrania potrzebnych zdjęć w polu podglądu.

W każdym razie, kilka różnych opcji, więc pomyślałem, że sonduję publiczność, aby zobaczyć, jak to zrobisz. Każda opinia jest doceniana. Osobiście cieszę się, że istnieje wiele sposobów na skórze tego kota.

Odpowiedz

69

Zastosowanie:

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

Tak więc, są wszystkie opcje, a potem jest wasza oczywistość, którą przeoczyłem. Dzięki za napiwek, oszczędzasz mi mnóstwo kłopotów! – f4nt

+3

Korzystanie z filtru segmentów ma dodatkową zaletę. Jeśli przekazujesz w Django QuerySet (w przeciwieństwie do kolekcji), plaster przejdzie do bazowego zapytania SQL, ograniczając liczbę wierszy, które strona będzie pobierać z bazy danych. –

+0

@Dave, +1: dziękuję, nie wiedziałem o tej optymalizacji - fajnie! –

1

to lepiej zrobić w kolekcji gallery.photo_set. Zakodowane na sztywno "3" w szablonie to zły pomysł na dłuższą metę.

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

W swojej funkcji widoku, można robić takie rzeczy jak Pick 3 losowe zdjęcia lub 3 ostatnie zdjęcia.

+0

W rzeczywistości, ponieważ 3 ma związek z prezentacją, która pasuje do szablonu, inne szablony mogą mieć więcej miejsca i chcą przedstawić 4 zdjęcia, nie? – noio

+0

@Noio: Grupowanie zdjęć w listy list powinno być funkcją widoku. Szablon pobiera listy list i wyświetla je. –

+1

lott to dziwne, że mówisz mu, żeby nie "twardo kodował" stałej w szablonie, ale następnie dostarczając przykład tej samej stałej w kodzie serwera. To jest straszna rada - szablon jest dokładnie tam, gdzie chciałbyś umieścić zmienną, która może ulec zmianie na podstawie zmian w projekcie. –

Powiązane problemy