Sorl-thumbnail 不在“/缓存”文件夹中生成缩略图

Sorl-thumbnail not generating thumbnails in '/cache' folder

我正在尝试在我的模板中使用 sorl-thumbnail,但我无法在 'sorl-thumbnail' 用于检索缩略图的正确“/cache”目录中成功生成缩略图。

好像很多人都遇到过这个问题,但是以前的解决方案对我没有用。我有 运行 ./manage.py migrate 并且我确保我在我的 models.py 中使用 sorl.thumbnail.ImageField 而不是默认的 django.db.models.ImageField 并且我尝试使用 ./manage.py thumbnail cleanup./manage.py thumbnail clear。我还读到 memcached 可能会干扰某些事情,但即使所有提到的 memcached 都被注释掉了,我也无法让 sorl-thumbnails 工作。

作为参考,我运行将我的项目安装在由 DigitalOcean 托管的 Ubuntu 18.04.2 apache2 服务器上。

html:

{% for obj in object_list %}
    ...
    {% thumbnail obj.image "75x75" as im %}
        <img class = "artwork" src="{{im.url }}"/>
    {% endthumbnail %}
    ...
{% endfor %}

settings.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")

models.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 = 'CACHE/'

然后 运行 collectstatic --noinput 像往常一样。在 Digital Ocean 中,您应该会看到在您的存储桶中创建了一个名为 CACHE 的新文件夹。

404 错误听起来像是您忘记了以下两个设置:

AWS_S3_ENDPOINT_URL - 定义静态标签如何重写 img url 以指向其在您的存储桶中的位置。

AWS_S3_CUSTOM_DOMAIN - 如果您使用自定义域,则与上述相同。

正如所怀疑的那样,Sorl Thumbnail 工作正常,问题是用户错误。我在 settings.py 中错误地配置了 MEDIA_ROOT,导致 Sorl Thumbnail 试图从不存在的位置检索媒体。