一起使用 django-admin-multiupload 和 django-imagekit 时出错
Error when using django-admin-multiupload and django-imagekit together
目前我正在使用 django-imagekit 在画廊应用程序的图像密集型视图中显示缩略图。为此,我使用 'model-method',表示我在模型中创建缩略图。
现在考虑到管理员的舒适度(一次上传多张图片)我也想在管理视图中实现多张上传表单。为了稍微简化一些事情,我尝试使用我在 GitHub 上找到的一个应用程序,django-admin-multiupload(我无法 link 因为我的声誉很低,但这是确切的名字GitHub)。
当我只使用 django-imagekit 时,一切正常,我得到了漂亮的缩略图,就像预期的那样。当我只使用 django-admin-multiupload 时,一切正常,我可以像预期的那样上传多张图片。
当我同时使用这两个应用程序时,问题就出现了。多重上传仍然可以正常工作,但是当我打开视图并实际实现缩略图时(只使用两者而不实现缩略图可以正常工作),在应该显示缩略图的地方我会得到以下错误:
/gallery/ 出现 OSError - 解码器 jpeg 不可用
您可以在此处查看完整错误:http://pastebin.com/gtVYEeG7
当仅启动单个应用程序并且它有效时,我的困惑就开始了。因此,据我所知,不可能存在所有 PIL 问题。
提供更多信息:我正在使用具有以下软件包列表的 virtualENV:
- 点子
- django
- 太平船
- 皮尔基特
- django-imagekit
- django-amdin-multiupload
同时提供一些我的实现代码,这里是:
文件:models.py
class Image(models.Model):
"""the model for the images"""
# the foreign key from the event
event = models.ForeignKey('Event', related_name='images',
blank=True, null=True)
# the image itself
# file = models.FileField('File', upload_to='gallery/images/')
file = models.ImageField('File', upload_to='gallery/images/')
image_thumbnail = ImageSpecField(source='file',
processors=[
ResizeToFill(300, 250)
],
format='JPEG',
options={'quality': 40})
# image title to represent it in the admin interface
image_name = models.CharField(max_length=35, default='img')
# publication date of the image
pub_date = models.DateTimeField('date published',
auto_now_add=True)
# for a better representation of the image
def __str__(self):
return self.image_name
文件:admin.py
(这个主要是 django-admin-multiupload repo 示例中的建议,可以在这里查看:https://github.com/gkuhn1/django-admin-multiupload/blob/master/example/gallery/admin.py)
from django.contrib import admin
from django.shortcuts import get_object_or_404
from gallery.models import Event, Image
from multiupload.admin import MultiUploadAdmin
# Register your models here.
# allows inline add of single images
class ImageInlineAdmin(admin.TabularInline):
model = Image
# used to define the process_uploaded_file function
# so it will not be duplicated in the Admin-Classes
class GalleryMultiuploadMixing(object):
def process_uploaded_file(self, uploaded, event, request):
image = event.images.create(file=uploaded)
return {
'url': image.file.url,
'thumbnail': image.file.url,
'id': image.id,
'name': image.image_name
}
# admin class for event model
class EventAdmin(GalleryMultiuploadMixing, MultiUploadAdmin):
inlines = [ImageInlineAdmin,]
multiupload_form = True
multiupload_list = False
def delete_file(self, pk, request):
obj = get_object_or_404(Image, pk=pk)
return obj.delete()
admin.site.register(Event, EventAdmin)
# admin class for image model
class ImageAdmin(GalleryMultiuploadMixing, MultiUploadAdmin):
multiupload_form = False
multiupload_list = True
admin.site.register(Image, ImageAdmin)
文件:index.html
<td><img class="img-responsive" src="{{ image.image_thumbnail.url }}" /></td>
如果需要任何其他信息,请随时询问。
在此先感谢您,感谢您的帮助。
编辑:今天我尝试了另一种方式,发现错误只出现在使用 django-admin-multiupload 上传的图像上,而不是只显示图像是用正常方法上传的。也许这可以帮助找到解决方案。
此错误主要是由损坏的数据库引起的,可以通过返回旧版本并重新实现新代码来修复。所以在django-admin-multiupload或者django-imagekit中都没有问题。
目前我正在使用 django-imagekit 在画廊应用程序的图像密集型视图中显示缩略图。为此,我使用 'model-method',表示我在模型中创建缩略图。
现在考虑到管理员的舒适度(一次上传多张图片)我也想在管理视图中实现多张上传表单。为了稍微简化一些事情,我尝试使用我在 GitHub 上找到的一个应用程序,django-admin-multiupload(我无法 link 因为我的声誉很低,但这是确切的名字GitHub)。 当我只使用 django-imagekit 时,一切正常,我得到了漂亮的缩略图,就像预期的那样。当我只使用 django-admin-multiupload 时,一切正常,我可以像预期的那样上传多张图片。
当我同时使用这两个应用程序时,问题就出现了。多重上传仍然可以正常工作,但是当我打开视图并实际实现缩略图时(只使用两者而不实现缩略图可以正常工作),在应该显示缩略图的地方我会得到以下错误:
/gallery/ 出现 OSError - 解码器 jpeg 不可用
您可以在此处查看完整错误:http://pastebin.com/gtVYEeG7 当仅启动单个应用程序并且它有效时,我的困惑就开始了。因此,据我所知,不可能存在所有 PIL 问题。 提供更多信息:我正在使用具有以下软件包列表的 virtualENV:
- 点子
- django
- 太平船
- 皮尔基特
- django-imagekit
- django-amdin-multiupload
同时提供一些我的实现代码,这里是:
文件:models.py
class Image(models.Model):
"""the model for the images"""
# the foreign key from the event
event = models.ForeignKey('Event', related_name='images',
blank=True, null=True)
# the image itself
# file = models.FileField('File', upload_to='gallery/images/')
file = models.ImageField('File', upload_to='gallery/images/')
image_thumbnail = ImageSpecField(source='file',
processors=[
ResizeToFill(300, 250)
],
format='JPEG',
options={'quality': 40})
# image title to represent it in the admin interface
image_name = models.CharField(max_length=35, default='img')
# publication date of the image
pub_date = models.DateTimeField('date published',
auto_now_add=True)
# for a better representation of the image
def __str__(self):
return self.image_name
文件:admin.py
(这个主要是 django-admin-multiupload repo 示例中的建议,可以在这里查看:https://github.com/gkuhn1/django-admin-multiupload/blob/master/example/gallery/admin.py)
from django.contrib import admin
from django.shortcuts import get_object_or_404
from gallery.models import Event, Image
from multiupload.admin import MultiUploadAdmin
# Register your models here.
# allows inline add of single images
class ImageInlineAdmin(admin.TabularInline):
model = Image
# used to define the process_uploaded_file function
# so it will not be duplicated in the Admin-Classes
class GalleryMultiuploadMixing(object):
def process_uploaded_file(self, uploaded, event, request):
image = event.images.create(file=uploaded)
return {
'url': image.file.url,
'thumbnail': image.file.url,
'id': image.id,
'name': image.image_name
}
# admin class for event model
class EventAdmin(GalleryMultiuploadMixing, MultiUploadAdmin):
inlines = [ImageInlineAdmin,]
multiupload_form = True
multiupload_list = False
def delete_file(self, pk, request):
obj = get_object_or_404(Image, pk=pk)
return obj.delete()
admin.site.register(Event, EventAdmin)
# admin class for image model
class ImageAdmin(GalleryMultiuploadMixing, MultiUploadAdmin):
multiupload_form = False
multiupload_list = True
admin.site.register(Image, ImageAdmin)
文件:index.html
<td><img class="img-responsive" src="{{ image.image_thumbnail.url }}" /></td>
如果需要任何其他信息,请随时询问。 在此先感谢您,感谢您的帮助。
编辑:今天我尝试了另一种方式,发现错误只出现在使用 django-admin-multiupload 上传的图像上,而不是只显示图像是用正常方法上传的。也许这可以帮助找到解决方案。
此错误主要是由损坏的数据库引起的,可以通过返回旧版本并重新实现新代码来修复。所以在django-admin-multiupload或者django-imagekit中都没有问题。