Джанго - Что нужно знать о sorl-thumbnail

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

  1. Реализует ли это только в template то же самое, что и использование в models или view и создание нового эскиза для каждого?
  2. Как настроить разные эскизы для разных изображений, как это можно сделать в easy_thumbnail?
  3. Как переопределить значения по умолчанию, например: переопределить значение 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 %}

Редактировать:

Как добиться чего-то подобного для sorl-thumbnails, что можно сделать в easy-thumbnails:

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 ответ

Решение

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

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

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

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

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

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

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

  • Является ли внедрение его только в шаблоне таким же, как использование его в моделях или представлении и создание нового эскиза для каждого из них?

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

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

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

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

Здесь есть список настроек: 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 делает, хотя потребовалось бы много программирования для достижения результатов 2 маленьких шаблонов выше.

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

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