0

有类似的模型:

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
4

2 回答 2

3

第一部分:

像这样传递它: sizes=( (56,34), (195,123), )

第二部分:

upload_to您可以为Django 将调用的函数指定一个函数,将模型实例和原始文件名传递给它。这样,您可以组合一个基于 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它。

于 2010-04-02T19:22:42.990 回答
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

于 2016-05-13T14:19:42.170 回答