sorl-thumbnail和文件重命名

时间:2010-04-02 19:15:32

标签: python django sorl-thumbnail

有一个类似的模型:

class Foo(models.Model):
    slug = models.SlugField(unique=True)
    img = ImageWithThumbnailsField(upload_to='uploads/',thumbnail={'size': (56, 34)})

它工作正常,但我想再添加2个功能:

1-除了56x34

之外,它还应该生成第二个缩写为195x123的缩略图

2-保存模型原始图像时,应使用slug将其重命名为两个缩略图。

例如

我正在上传1.jpg,我将slug命名为“i-like-this-country2” 我应该保存这些命名版本:

1- i-like-this-country2_original.jpg
2- i-like-this-country2_middle.jpg  #for 195x123
3- i-like-this-country2_small.jpg #for 56x34

2 个答案:

答案 0 :(得分:3)

第一部分:

只需将其传递出去:sizes=( (56,34), (195,123), )

第二部分:

您可以为Django将调用的upload_to指定一个函数,并将其传递给模型的实例和原始文件名。有了它,你可以组合一个基于slug重命名文件的函数,因为Django会使用你返回的任何东西。未经测试的代码,但是像这样:

def _Foo_img_name(instance, filename):
    # grab the extension
    left_path, extension = self.file.name.rsplit('.',1)

    # change the filename then return
    return 'uploads/%s.%s' % (instance.slug, extension)

class Foo(models.Model):
    img = ImageWithThumbnailsField(upload_to=_Foo_img_name, ... )

我不相信你能做的就是将<filename>_56x34.jpg更改为除此之外的任何内容。

答案 1 :(得分:0)

您所要做的就是在models.py中创建一个方法,如下所示:

def rename_file(instance, filename):
    extension = filename.split(".")[1]
    rename = "rename_here"
    return rename + "." + extension

然后在扩展models.Model

的类中
class MyImage(models.Model):
    image = ImageField(upload_to=rename_file)

不要忘记从sorl.thumbnail import ImageField导入!