Я пытаюсь использовать sorl-thumbnail в своих шаблонах, но мне не удалось успешно сгенерировать миниатюры в правильном каталоге «/cache», который sorl-thumbnail использует для извлечения миниатюр.
Кажется, что эта проблема случалась с несколькими людьми раньше, однако предыдущие решения не работали для меня. Я запустил ./manage.py migrate
и убедился, что использую sorl.thumbnail.ImageField, а не django.db.models.ImageField по умолчанию в моих моделях.py, и я попытался использовать ./manage.py thumbnail cleanup
и ./manage.py thumbnail clear
. Я также читал, что memcached может мешать работе, но даже после того, как все упоминания о memcached закомментированы, я не могу заставить работать sorl-thumbnails.
Для справки: я запускаю свой проект на сервере Ubuntu 18.04.2 apache2, размещенном на DigitalOcean.
HTML:
{% for obj in object_list %}
...
{% thumbnail obj.image "75x75" as im %}
<img class = "artwork" src = "{{im.url }}"/>
{% endthumbnail %}
...
{% endfor %}
настройки.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sorl.thumbnail',
'posts',
'login',
]
...
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "/home/arthouse/workspace/code/side_proj/assets/")
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "/home/arthouse/workspace/code/side_proj/static_cdn/")
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "/media_cdn")
модели.py:
from sorl.thumbnail import ImageField
class Post(models.Model):
image = ImageField(upload_to=upload_location,
null=True,
blank=True,
width_field = "width_field",
height_field = "height_field")
Я установил THUMBNAIL_DEBUG=True
, но из этого ничего не выходит. Я вижу, что миниатюры создаются (например: media/cache/6d/13/6d13206b5207bf2b6234295b749f1419.jpg), но в моем MEDIA_ROOT никогда не создается каталог /cache, что приводит к ошибке 404.
Я рад поделиться дополнительными фрагментами кода, если это поможет!
Попробуйте установить параметр Solr Thumbnail, который определяет, куда он загружает файлы:
THUMBNAIL_PREFIX = 'КЭШ/'
Затем запустите collectstatic --noinput как обычно. В Digital Ocean вы должны увидеть новую папку с именем CACHE, созданную в вашей корзине.
Ошибка 404 звучит так, будто вы забыли следующие две настройки:
AWS_S3_ENDPOINT_URL — определяет, как статический тег переписывает URL-адрес img, чтобы указать его местоположение в вашей корзине.
AWS_S3_CUSTOM_DOMAIN — то же, что и выше, если вы используете личный домен.
Как и предполагалось, Sorl Thumbnail работал без проблем, и проблема заключалась в ошибке пользователя. Я неправильно настроил MEDIA_ROOT в моем settings.py
, что привело к тому, что Sorl Thumbnail пытался получить медиафайл из несуществующего местоположения.