1

我想上传宽度为 400 像素的图像并获取另外两个图像 - 200 像素和 100 像素。我用谷歌搜索,django-imagekit看起来可以做到这一点。
所以我添加imagekit到 INSTALLED_APPS 并将其添加到我的模型中:

from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFit
class Bookmaker(models.Model):
    ...
    logo_large = models.ImageField(upload_to="logo/large")
    logo_medium = ImageSpecField([ResizeToFit(width=200)], source='logo_large', options={'quality': 90})
    logo_small = ImageSpecField([ResizeToFit(width=100)], source='logo_large', options={'quality': 90})

这是我的表格:

@staff_member_required
def new(request):
    if request.method == 'POST':
        form = BookmakerForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
    else:
        form = BookmakerForm()
    template = loader.get_template('bookmaker/new.html')
    context = RequestContext(request, {
        'form': form,
    })
    return HttpResponse(template.render(context))

我已经浏览了文档,但我无法理解 imagekit 是如何工作的。我需要在我的应用程序中设置缓存吗?它是否在文件夹中物理创建文件MEDIA
好吧,我的设置不起作用。当我上传图片logo_large时,会创建大文件,但logo_small不是logo_medium。如果我打印{{bookmaker.logo_small}}我得到media/CACHE/images/logo/large/bookmaker/24d9f99ffdf277ed3fc25e2cf4d37554.jpg,它不存在 (404)。我是否需要设置 CACHE 才能使其工作?

4

2 回答 2

0

您需要在模板中使用{{ bookmaker.logo_small.url }}以获取图像的 URL。然后将创建图像并将其存储在CACHE文件夹中。

于 2016-01-09T18:09:51.647 回答
0

嗯,现在可以了。我什么也没有做过。可能只需要一些时间来生成这些图像(我不知道生成图像需要什么),可能重启./manage.py runserver就足够了。

./manage.py generateimages每次上传后我可能需要打电话吗?

于 2016-01-09T20:20:22.340 回答