我最初的目标是以最基本的方式使用sorl-thumbnail缓存我从外部网站下载的文件系统裁剪图像。我现在不关心性能,也不想设置额外的系统(memcachedb,redis)。我正在使用开发运行服务器。
一方面,文档使我觉得必须使用这两个选项中的一个。我觉得我读过的其他地方可以设置为不需要这些KV商店。作为一个证据,我在参考文档中看到了设置sorl.thumbnail.kvstores.dbm_kvstore.KVStore
(其中说明一个简单的Key Value Store在标准Python库之外没有依赖关系,并使用DBM模块来存储数据。),但我也无法做到(见下文)。
使用Python 2.7.5,Django 1.7.1,Pillow 2.6.1和sorl-thumbnail 12.1c。
在我的INSTALLED_APPS中添加了sorl.thumbnail
。
已添加到settings.py:
THUMBNAIL_DEBUG = True
import logging
from sorl.thumbnail.log import ThumbnailLogHandler
handler = ThumbnailLogHandler()
handler.setLevel(logging.DEBUG)
logging.getLogger('sorl.thumbnail').addHandler(handler)
尽管如此,我看到我的网络服务器控制台中没有其他日志记录。
尝试同步我的数据库:
$ ./manage.py migrate thumbnail
Operations to perform:
Apply all migrations: thumbnail
Running migrations:
Applying thumbnail.0001_initial... FAKED
似乎没有表格添加到我的数据库中。
此时,我已在我的模板中添加了load指令和以下代码段,其中item.image_url为models.URLField
,除thumbnail
外,其工作正常。
{% thumbnail item.image_url "235x200" crop="center" as im %}
<img src="{{ im.url }}">
{% empty %}
<p>No image</p>
{% endthumbnail %}
当我尝试查看该页面时,我看到图片链接已损坏:
http://127.0.0.1:8001/<myapp>/cache/cf/43/cf43126f1f961593650b5df4791e329f.jpg 404 (NOT FOUND)
我的MEDIA_URL
未设置,但我尝试使用它无济于事。
我进一步尝试进入设置:THUMBNAIL_KVSTORE = 'sorl.thumbnail.kvstores.dbm_kvstore.KVStore'
但这会在浏览器中显示DJANGO错误:Error importing module sorl.thumbnail.kvstores.dbm_kvstore: "No module named dbm_kvstore"
。
我可以用这种方式配置它,不需要memcached,如果是这样,我的哪些设置错误/丢失?如果我必须使用memcached,除了安装之外,还必须配置多少设置?感谢。
更新
以下是涉及静态资产的设置。
STATIC_URL = '/static/'
STATIC_ROOT = '/tmp/static/'
STATICFILES_DIRS = (
PROJECT_ROOT.child("static"),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder', If enabled breaks my LESS CSS.
'static_precompiler.finders.StaticPrecompilerFinder',
)
# STATICFILES_STORAGE not set but should default to 'django.contrib.staticfiles.storage.StaticFilesStorage'
我已经从mysite/static/img
提供了一些静态图像。我忘了提到我正在使用Django Static Precompiler用于LESS CSS。我的LESS文件位于mysite/static/css
,并已编译为/tmp/static/COMPILED/
。
我看到我的项目根目录cache
中有一个mysite
目录,并且它确实包含了尝试投放的文件:cache/6a/a6/6aa6ebf6cef5bf481fd37d4947d25623.jpg
。
我已阅读有关提供静态资产的文档,但我不清楚要更改哪些设置。似乎我需要在不同的目录中生成jpg,或者将此目录添加到我正在为其提供静态资产的目录列表中。我尝试将此路径添加到STATICFILES_DIRS
,但这不起作用。
答案 0 :(得分:1)
当你进入这个目录'/ cache / cf / 43 /'时,你真的在那里看到文件'cf43126f1f961593650b5df4791e329f.jpg'吗?
如果是这样,它可能会返回404,因为你正在使用Django runserver(不确定你是不是)。如果您愿意,可能值得一看如何在开发模式{@ 3}}中提供媒体文件。
答案 1 :(得分:1)
您不需要初始设置缓存后端,您可能需要设置提供静态文件,请查看有关提供MEDIA和STATIC资源的django文档。
但最重要的是,Django 1.7支持在12.1c版本中引入。
先尝试:
pip install sorl-thumbnail==12.1c
在设置文件中设置调试缩略图设置也很有帮助:
THUMBNAIL_DEBUG = True
答案 2 :(得分:0)
其他两个答案都正确地提出了serving up media files的问题。以下是所需的代码更改的完整列表:
我掩饰了MEDIA资产与STATIC资产不同的事实。 This answer是一个让我知道sorl-thumbnail依赖于MEDIA_URL来形成其URL,以及相应的MEDIA_ROOT的事实。为了我的发展,我设置了以下内容:
MEDIA_URL = '/media/'
MEDIA_ROOT = '/tmp/media/'
我使用this snippet进行URLconf更改以提供媒体文件。此时,我将一个图像放在媒体目录中,并确保我的模板可以正确引用它。
到目前为止,我手动删除了sorl-thumbnail生成的缩略图,但没有设置和活动的排列会重新生成它们。我记得让你的键值存储/数据库/缓存图像不同步requires manual cleanup。管理命令./manage.py thumbnail cleanup
完成了工作,它又开始重新生成。
另外值得注意的是,我根本不需要设置THUMBNAIL_KVSTORE,也不需要设置任何键值存储。
我希望这有助于让其他人更快地开始设置他们的开发环境。