Джанго - Что нужно знать о sorl-thumbnail
Я использую 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 %}
Редактировать:
Как добиться чего-то подобного для 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
запрашивается новый эскиз, он проверяет, существует ли он в своем кеше:
- Если он существует, он возвращается.
- Если это не так, новый генерируется и сохраняется, а затем возвращается.
Таким образом, кэш миниатюр генерируется по мере необходимости. Ключ, хранилище значений - это средство хранения миниатюр, которое позволяет быстро их искать и извлекать. Используя описанные выше шаги, эскизы будут сгенерированы и сохранены по запросу пользователей.
Процесс создания миниатюр по запросу работает хорошо, так как изображения постепенно добавляются на ваш сайт, миниатюры для новых изображений будут создаваться по мере необходимости, а миниатюры для старых изображений извлекаются из магазина.
Для хранения миниатюр 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
Я был бы рад помочь вам с ними.