Django - Что нужно знать о сорном миниатюре

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

  • Выполняется ли реализация только в template, используя его в models или view и создавая новый миниатюру для каждого из них?
  • Как настроить различные миниатюры для разных изображений, как это можно сделать в easy_thumbnail?
  • Как переопределить значения по умолчанию, например: переопределить значение Quality и т.д.

И, наконец, правильно ли это реализовать? Любые советы или предложения будут высоко оценены. Спасибо.

HTML:

{% for photo in photos %}
    <div class="thumbnail_container">
        <a href="{{MEDIA_URL}}{{photo.image}}" class="gallery" title="{{photo.title}}">
            {% thumbnail photo.image "200x200" as im %}
                <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"  class="thumbnail">
            {% endthumbnail %}
        </a>
    </div>
{% endfor %}

Edit:

Как добиться чего-то подобного для эскизов sorl, которые можно сделать с помощью простых эскизов:

settings.py

THUMBNAIL_ALIASES = {
    '': {
        'avatar': {'size': (100,100), 'crop': True},
        'forum': {'size': (203,103), 'crop':False},
    },
}

И затем в шаблонах я могу просто выбрать из псевдонимов, которые я определил в settings.py:

<img src="/static/{{forum.image |thumbnail_url:'forum' }}">

или

<img src="/static/{{forum.image |thumbnail_url:'avatar' }}">

Ответ 1

Как и многие вещи в django sorl-thumbnail, реализованы как просто, так и элегантно, и то, как вы его используете, является правильным.

Каждый раз, когда sorl-thumbnail запрашивается новый эскиз, он проверяет, существует ли его в кеше:

  • Если он существует, он возвращается.
  • Если это не так, новый создается и сохраняется, а затем возвращается.

Таким образом, кеш миниатюр генерируется по мере необходимости. Ключ, хранилище значений - это средство хранения миниатюр, что позволяет им быстро искать и извлекать. Используя приведенные выше шаги, миниатюры будут сгенерированы и сохранены, поскольку они запрашиваются вашими пользователями.

Процесс генерации миниатюр по требованию работает хорошо, так как изображения постепенно добавляются на ваш сайт, миниатюры для новых изображений будут созданы по мере необходимости, а миниатюры для более старых изображений, полученных из хранилища.

Для сохранения эскизов sorl-thumbnail используется комбинация базы данных и кеша памяти. База данных гарантирует, что все миниатюры будут сохранены при перезапуске приложения и/или веб-сервера. Эскизы затем будут загружаться в кеш памяти (как вы догадались) по требованию и, таким образом, обеспечить быстрое время загрузки для пользователя.

Чтобы ответить на ваши вопросы:

  • Осуществлять ли его только в шаблоне то же самое, что использовать его в моделях или в представлении и создавать новые миниатюры для каждого из них?

Невозможно создать эскизы в моделях или представлениях, поскольку они генерируются по требованию, поскольку пользователь их запрашивает. Это очень эффективно. Думаю, вы могли бы написать script, чтобы запросить все эскизы, которые запускались в ночное время, чтобы обеспечить создание всех эскизов, хотя это, вероятно, не требуется.

  • Как настроить различные миниатюры для разных изображений, как это можно сделать в easy_thumbnail?

Вся конфигурация выполняется в теге {% thumbnail %}, если генерируются разные эскизы для одного и того же изображения, они будут храниться отдельно в хранилище ключей, значений.

  • Как переопределить значения по умолчанию, например: переопределить значение Quality и т.д.

Здесь есть список настроек: http://sorl-thumbnail.readthedocs.org/en/latest/reference/settings.html, все они должны быть установлены в файле settings.py. По умолчанию качество установлено на 95, что довольно велико.

Изменить - установите качество jpeg в settings.py

...
THUMBNAIL_QUALITY = 60
THUMBNAIL_PROGRESSIVE = False
...

Эти два дополнения в любом месте файла settings.py для вашего проекта уменьшат качество jpeg для миниатюр до 60 и отключат создание прогрессивных jpeg.

Изменить - псевдонимы эскизов

В sorl-thumbnail нет встроенной поддержки псевдонимов эскизов. Вероятно, самый простой способ реализовать их - это небольшие вспомогательные шаблоны, которые затем могут быть загружены в ваши основные шаблоны.

Итак, шаблон страницы может выглядеть примерно так:

....
{% load thumbnail %}
....
<h3>Recent image uploads:</h3>
{% for item in recentUploads %}
    {% include "bigThumbnail.html" %}
{% endfor %}

<h3>Older image uploads</h3>
{% for item in oldUploads %}
    {% include "smallThumbnail.html" %}
{% endfor %}
....

Шаблоны эскизов будут храниться как отдельные файлы в каталоге шаблонов и могут выглядеть примерно так:

bigThumbnail.html

{% thumbnail item.image "100x100" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}

smallThumbnail.html

{% thumbnail item.image "40x40" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}

В каждом из дополнительных шаблонов могут быть сделаны все настройки для ваших "псевдонимов". В качестве альтернативы можно было бы создать дополнительный тег шаблона для чтения этих атрибутов из settings.py, это то, что делает easy_thumbnail, хотя для достижения результатов двух небольших шаблонов, указанных выше, потребуется много программистов.

Если у вас есть дополнительные вопросы о sorl-thumbnail, я был бы рад помочь вам с ними.