Sorl-thumbnail如何显示缩略图

时间:2015-04-09 08:37:18

标签: python django sorl-thumbnail

我无法显示由Sorl-thumbnail生成的缩略图。这是我的view.py:

def index(request):
    if request.method == 'GET':
        im = get_thumbnail('/Users/cheng/Dev/notes_proj/images/2015/4/8/c0eb6152bcb74c31c6eff3562513ee6507f8657d.png', '100x100')
        context = {'im': im}
        return render(request, 'index.html', context)

这是我的模板:

{% load thumbnail %}
    {% thumbnail im as img %}
    <img src="{{ img.url }}">
{% endthumbnail %}

以下是错误消息:

[09/Apr/2015 16:27:35] "GET /cache/51/03/5103e40af16185770a5928d7f5a5b31a.jpg HTTP/1.1" 404 13744

THUMBNAIL_DEBUG = True 已开启且Sorl没有错误消息。

我正在使用默认的数据库缓存方法(这意味着除了向INSTALLED_APP添加sorl并运行&#34; python manage.py migrate&#34;)之外不需要额外的设置。

我搜索过我的硬盘并没有&#34; /cache/51/03/5103e40af16185770a5928d7f5a5b31a.jpg"

我目前的设置不允许我使用&#39; ImageField&#39;在我的模型中。所以我只是将绝对路径存储到图像文件中,并使用sorl的低级API生成如上所示的缩略图。

我看到这篇文章:Sorl-thumbnail bad url's
我将MEDIA_URL和MEDIA_ROOT添加到我的settings.py:

MEDIA_URL = 'images/'
MEDIA_ROOT = os.path.join(BASE_DIR, '../images')

仍然收到404错误:

09/Apr/2015 16:45:43] "GET /images/cache/51/03/5103e40af16185770a5928d7f5a5b31a.jpg HTTP/1.1" 404 13767

我检查了数据库表&#39; thumbnail_kvstore&#39;。它总是空的。

我正在使用:

sorl-thumbnail(12.2) Django(1.7.7)

那么哪部分我做错了?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我想记录发生的事情并为像我这样的新手提供一些建议:

  1. 检查数据库缓存或您正在使用的任何缓存后端,以查看名为 thumbnail_kvstore 的表下是否有任何内容。对于我遇到的情况,我尝试生成缩略图的原始图像文件是0字节。即使文件为空,Sorl也会为缩略图生成一个键。但是,密钥本身不存储在数据库中。我想如果在硬盘上创建了一个实际的缩​​略图文件,那么sorl只会更新数据库表。

  2. 检查您的硬盘。创建缩略图文件后,您可以打印出网址:

    im = get_thumbnail('/Users/cheng/Dev/notes_proj/images/2015/4/8/c0eb6152bcb74c31c6eff3562513ee6507f8657d.png')
    print im.url
    
  3. 这是我看到的打印件:

    images/cache/e6/99/e699913d4ee776453e5c37108decb1bc.jpg
    

    现在,转到您的MEDIA_ROOT,看看是否有一个名为缓存的新目录,并查看.jpg缩略图是否在那里。

    1. 如果你可以验证缩略图文件是否存在但仍然有404.现在去检查你的urls.py,确保你有这样的东西:

      from django.conf import settings
      
      urlpatterns = patterns('',
              ...
              url(r'^images/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
      )
      
    2. 假设您已将MEDIA_URL设置为以下内容:

      MEDIA_ROOT ='images/'
      

      根据您的需要调整名称。

      现在一切都应该有效。

      P.S。还有一点需要注意的是,在生产中,您可能有另一台服务器来处理静态文件。在这种情况下,您应该删除:

      url(r'^images/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
      
      来自你的urls.py文件。