我正在尝试在模板中使用sorl-thumbnail,但是我无法在'sorl-thumbnail'用于检索缩略图的正确的'/ cache'目录中成功生成缩略图。
似乎这个问题以前已经发生在许多人身上,但是以前的解决方案对我来说没有用。我已运行./manage.py migrate
,并确保我在models.py中使用的是sorl.thumbnail.ImageField而不是默认的django.db.models.ImageField,并且我尝试使用./manage.py thumbnail cleanup
和{ {1}}。我还读到memcached可能会干扰某些事情,但是即使所有提到memcached的内容都被注释掉了,我也无法使用唯一的缩略图。
作为参考,我在由DigitalOcean托管的Ubuntu 18.04.2 apache2服务器上运行我的项目。
html:
./manage.py thumbnail clear
settings.py:
{% for obj in object_list %}
...
{% thumbnail obj.image "75x75" as im %}
<img class = "artwork" src="{{im.url }}"/>
{% endthumbnail %}
...
{% endfor %}
models.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")
我已经设置了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")
,但是没有输出。我可以看到生成了缩略图(例如:media / cache / 6d / 13 / 6d13206b5207bf2b6234295b749f1419.jpg),但是在MEDIA_ROOT中从未创建过/ cache目录,这会导致404错误。
如果有帮助,我很乐意分享更多代码段!
答案 0 :(得分:0)
尝试设置“ Solr缩略图”设置来定义文件上传位置:
THUMBNAIL_PREFIX ='CACHE /'
然后像往常一样运行collectstatic --noinput。在Digital Ocean中,您应该在存储桶中看到一个名为CACHE的新文件夹。
404错误听起来像您忘记了以下两个设置:
AWS_S3_ENDPOINT_URL-定义静态标签如何重写img url以指向其在存储桶中的位置。
AWS_S3_CUSTOM_DOMAIN-如果使用自定义域,则与上面相同。
答案 1 :(得分:0)
如所怀疑的,Sorl Thumbnail运行正常,没有问题,问题是用户错误。我在settings.py
中错误地配置了MEDIA_ROOT,这导致Sorl Thumbnail试图从不存在的位置检索媒体。