我无法显示由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)
那么哪部分我做错了?
非常感谢!
答案 0 :(得分:0)
我想记录发生的事情并为像我这样的新手提供一些建议:
检查数据库缓存或您正在使用的任何缓存后端,以查看名为 thumbnail_kvstore 的表下是否有任何内容。对于我遇到的情况,我尝试生成缩略图的原始图像文件是0字节。即使文件为空,Sorl也会为缩略图生成一个键。但是,密钥本身不存储在数据库中。我想如果在硬盘上创建了一个实际的缩略图文件,那么sorl只会更新数据库表。
检查您的硬盘。创建缩略图文件后,您可以打印出网址:
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,看看是否有一个名为缓存的新目录,并查看.jpg缩略图是否在那里。
如果你可以验证缩略图文件是否存在但仍然有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/'
根据您的需要调整名称。
现在一切都应该有效。
P.S。还有一点需要注意的是,在生产中,您可能有另一台服务器来处理静态文件。在这种情况下,您应该删除:
url(r'^images/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),