2009-06-14 64 views
25

這是一個快速/簡單的希望。我知道一種通過自定義模板標籤解決這個問題的方法,但是我很好奇是否有其他方法可以用於我。我已經爲我的博客創建了一個畫廊功能,並且我有一個畫廊列表頁面來分類我的所有畫廊。現在,我不想顯示該列表中每個畫廊的所有照片,因爲如果每個畫廊甚至有20個圖像,那麼如果我在5個帖子分頁,那麼這是圖像上的100個圖像。這會浪費,而且是錯誤的方式去做事情。django循環計數器中斷

我的問題是,有沒有辦法從照片集顯示3張照片?我今天準備這樣做,但我不認爲可能是類似的信息(僞):

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

從文件來看,除非我完全失蹤了,這通過是不可能的模板系統。因此,我可以編寫自己的模板標籤來解決這個問題。我大概可以從視角來做一些事情,但我沒有深入研究這個想法。我擁有的另一個選項是爲模型提供預覽字段,並允許用戶在預覽字段中選擇他們想要的照片。

無論如何,有幾個不同的選擇,所以我想我會調查觀衆,看看你會怎麼做。任何意見表示讚賞。就個人而言,享受這種貓的皮膚有很多方法。

回答

69

用途:

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

所以,這裏有我的所有選擇,然後就是你明目張膽的我已經忽略的選項。感謝您的提示,爲我節省了很多麻煩! – f4nt 2009-06-14 07:52:56

+3

使用切片過濾器還有其他好處。如果傳入Django QuerySet(而不是集合),則切片將流入底層的SQL查詢,從而限制頁面從數據庫執行檢索的行數。 – 2009-06-14 17:44:01

1

這是更好的gallery.photo_set集合中完成的。從長遠來看,模板中的硬編碼「3」是一個壞主意。

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

在您的查看功能中,您可以執行諸如挑選3張隨機照片或3張最近照片等內容。

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]