【问题标题】:Sorl-thumbnail how to display thumbnailSorl-thumbnail 如何显示缩略图
【发布时间】:2015-06-14 12:48:30
【问题描述】:

我无法显示由 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 没有错误消息。

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

我搜索了我的硬盘,没有“/cache/51/03/5103e40af16185770a5928d7f5a5b31a.jpg”

我当前的设置不允许我在模型中使用“ImageField”。所以我只是简单地存储了图像文件的绝对路径,并使用了 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

我检查了数据库表“thumbnail_kvstore”。它总是空的。

我正在使用:

sorl 缩略图 (12.2) Django (1.7.7)

那么我做错了哪一部分?

非常感谢!

【问题讨论】:

  • 尝试清除和清理...
  • @RajaSimon 感谢您的建议,我这样做了,但仍然无法正常工作。在我看来,Sorl 出于某种原因根本没有生成缩略图。数据库缓存不应该是空的吧?
  • @RajaSimon 我进入文件夹,发现我引用的图像文件由于某种原因是 0 字节。在我恢复图像后,我可以看到正在数据库中创建缓存,我找到了媒体根目录中的缓存文件夹我也可以看到缩略图。但是,当我将它加载到我的模板中时,即使缩略图文件在那里,它仍然给我一个 404 ......我会继续挖掘
  • 继续前进,你会得到它..

标签: python django sorl-thumbnail


【解决方案1】:

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

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

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

    im = get_thumbnail('/Users/cheng/Dev/notes_proj/images/2015/4/8/c0eb6152bcb74c31c6eff3562513ee6507f8657d.png')
    print im.url
    

这是我看到的打印输出:

images/cache/e6/99/e699913d4ee776453e5c37108decb1bc.jpg

现在,转到您的 MEDIA_ROOT,查看是否有一个名为 cache 的新目录,并查看 .jpg 缩略图是否在其中。

  1. 如果您可以验证缩略图文件存在但仍然收到 404。现在去检查您的 urls.py,确保您有这样的内容:

    from django.conf import settings
    
    urlpatterns = patterns('',
            ...
            url(r'^images/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )
    

假设您已将 MEDIA_URL 设置如下:

MEDIA_ROOT ='images/'

根据您的需要调整名称。

现在一切都应该正常了。

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

url(r'^images/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

来自您的 urls.py 文件。

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 2011-07-01
    • 2011-07-29
    • 2012-06-12
    • 2018-01-06
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多