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 试图从不存在的位置检索媒体。
我正在尝试在我的模板中使用 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 试图从不存在的位置检索媒体。