2010-04-02 60 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呢!