2011-06-14 98 views
1

我有一個用戶的個人資料圖片。圖片將被轉換爲兩種尺寸:一種將顯示在他的個人資料(大約200像素寬)上,另一種將顯示在搜索結果中的較小縮略圖(大約64像素寬)。鏈接到用戶個人資料的多個圖像

什麼是構建數據庫和文件夾結構的最佳方式?

我的兩個想法DB結構是:

# 1) 
class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    ... 
    avatar = models.ImageField(upload_to='images/%Y/%m/%d', blank=True,) 
    avatar_thumbnail = models.ImageField(upload_to='images/%Y/%m/%d', blank=True,) 

# 2) 
class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    ... 

class Avatar(models.Model): 
    avatar = models.ImageField(upload_to='images/%Y/%m/%d') 
    user = models.ForeignKey(UserProfile) 

哪一個會是一個更好的方式來處理呢?如何構造我的圖像文件夾以便輕鬆分離和引用兩種圖像大小,這將是一種好方法?謝謝。

回答

1

我要說的是,第二個選項實際上是更好的。潛在地分成一個單獨的應用程序。我發現保持功能劃分好得多。將與您的頭像相關的所有內容保存在一個應用中,並保留縮略圖代碼等,並創建用於顯示頭像的模板標籤。

可能已經有一個應用程序...

+0

謝謝爲迴應。你將如何組織兩個不同圖像的文件結構? – David542 2011-06-14 18:48:01

+0

這兩個思想流派。首先,您可以使用相同的內部目錄結構在圖像文件夾旁邊創建縮略圖文件夾。我更喜歡第二個,這將創建縮略圖文件旁邊的拇指目錄,並將縮略圖保留在那裏。例如:upload_to ='images /%Y /%m /%d/thumbs /' – Hutch 2011-06-14 19:45:05

+0

你是否想要爲每個用戶創建一個單獨的文件夾,例如upload_to ='images /%s /%Y /%m/%d/thumbs /'%(用戶名)? – David542 2011-06-14 19:55:49

2

您可以使用Sorl縮略圖,上傳一張圖片並使用Sorl的模板標籤即時創建較小的版本。這也可以讓你不必創建另一個班級。我在這個圖書館取得了很大的成功,希望它能幫助你。

http://pypi.python.org/pypi/sorl-thumbnail/11.05.2

+0

@Brandon:謝謝你的迴應。到目前爲止,我只使用PIL進行圖像處理,但是會「動態地」創建縮略圖讓Sorl變得更慢?例如,如果我有一個包含50個縮略圖的50個用戶頁面。 – David542 2011-06-14 18:35:35

+1

圖像只創建一次,然後進行緩存,因此第一次發生這種情況時,創建圖像的處理時間會稍微長一些。說實話,我從來沒有在這個處理時間內看到足夠的延遲,甚至沒有注意到。我已經在我創建的每個Django站點上實現了它。 – Brandon 2011-06-14 18:40:02

+0

@Brandon:Sorl是否需要在Django中設置緩存? – David542 2011-06-14 18:45:58

相關問題