2011-06-14 75 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

相关问题