有一个类似的模型:
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
答案 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
导入!