Переименование изображений в шаблонах sorl-thumbnail

Я использую SORL-миниатюру через thumbnail Шаблон тега в моих шаблонах Django выглядит следующим образом:

{% thumbnail foo.imgA "1600x1200" as im %}
<a href='{{ im.url }}' title='{{ foo.imgA.url }}'>
{% endthumbnail %}

Оригинальное имя файла содержит некоторую информацию, которая имеет отношение к моим пользователям в случае, если они загрузят его. Когда я изменяю размер изображения, используя sorl-thumbnail, измененное изображение получает новое имя.

Есть ли способ для созданного sorl-thumbnail- изображения сохранить имя исходного файла (возможно, добавив "-thumb") или переименовать файл, используя код в шаблоне? (Я хотел бы оставить модель в покое.)

1 ответ

Да, это возможно, создав собственный бэкэнд на основе стандартного и перегружая _get_thumbnail_filename метод.

Например, что-то вроде этого

from sorl.thumbnail.base import ThumbnailBackend, EXTENSIONS

from sorl.thumbnail.conf import settings
from sorl.thumbnail.helpers import tokey, serialize
import os.path

class KeepNameThumbnailBackend(ThumbnailBackend):

    def _get_thumbnail_filename(self, source, geometry_string, options):
        """
        Computes the destination filename.
        """
        key = tokey(source.key, geometry_string, serialize(options))

        filename, _ext = os.path.splitext(os.path.basename(source.name))

        path = '%s/%s' % (key, filename)
        return '%s%s.%s' % (settings.THUMBNAIL_PREFIX, path, EXTENSIONS[options['format']])

Затем вы должны активировать этот новый бэкэнд в своем проекте settings.py

THUMBNAIL_BACKEND = 'path.to.KeepNameThumbnailBackend'

Я надеюсь, что это помогает

Другие вопросы по тегам