2010-04-02 80 views
0

具有类似的模型:SORL-缩略图和文件重命名

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

它工作正常,但我想2个更多的功能添加到它:

1-还应生成第二缩略图大小195x123 ,除了56x34

2-保存模型原始图像,它的两个缩略图应重新命名为通过使用slug。

例如

我上传1.JPG和我的名字作为鼻涕虫“我样这-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 

回答

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到那种事。

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呢!