sorl-thumbnail и переименование файла - PullRequest
0 голосов
/ 02 апреля 2010

с похожей моделью:

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

Работает нормально, но я хочу добавить еще 2 функции:

1 - также должен быть создан второй эскиз размером 195x123, в дополнение к 56x34

.

2- При сохранении исходного изображения модели и двух ее миниатюр следует переименовать, используя слаг.

Например

Я загружаю 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 ]

3 голосов
/ 02 апреля 2010

Первая часть:

Просто передайте это так: sizes=( (56,34), (195,123), )

Вторая часть:

Вы можете указать функцию для upload_to, которую Django будет вызывать, передавая ей экземпляр модели и исходное имя файла. С этим вы можете собрать функцию, которая переименовывает файл, основываясь на слаге, потому что 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 голосов
/ 13 мая 2016

Все, что вам нужно сделать, это создать метод в вашем 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

...