使用Django 1.7进行sorl-thumbnail的最小开发人员设置

时间:2014-11-14 04:43:40

标签: python django installation sorl-thumbnail

我最初的目标是以最基本的方式使用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,但这不起作用。

3 个答案:

答案 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的问题。以下是所需的代码更改的完整列表:

  1. 我掩饰了MEDIA资产与STATIC资产不同的事实。 This answer是一个让我知道sorl-thumbnail依赖于MEDIA_URL来形成其URL,以及相应的MEDIA_ROOT的事实。为了我的发展,我设置了以下内容:

    • MEDIA_URL = '/media/'
    • MEDIA_ROOT = '/tmp/media/'
  2. 我使用this snippet进行URLconf更改以提供媒体文件。此时,我将一个图像放在媒体目录中,并确保我的模板可以正确引用它。

  3. 到目前为止,我手动删除了sorl-thumbnail生成的缩略图,但没有设置和活动的排列会重新生成它们。我记得让你的键值存储/数据库/缓存图像不同步requires manual cleanup。管理命令./manage.py thumbnail cleanup完成了工作,它又开始重新生成。

  4. 另外值得注意的是,我根本不需要设置THUMBNAIL_KVSTORE,也不需要设置任何键值存储。

  5. 我希望这有助于让其他人更快地开始设置他们的开发环境。