如何在django admin中裁剪用django-filer选择的图像

时间:2014-11-20 06:51:11

标签: django image crop django-filer

我使用django-filer来管理图片。在为FilerImageField选择一个后,如何裁剪和成像?

1 个答案:

答案 0 :(得分:2)

这是一个结合了django-filer和django-image-cropping的代码段。只需使用CroppableFilerImageField代替FilerImageField您的模型。

请注意,选择要裁剪的图像后,仍需按“保存并继续编辑”。

from django.conf import settings

from filer import settings as filer_settings
from filer.fields.image import (
    AdminImageWidget, AdminImageFormField, FilerImageField,
)
from filer.models import File


class CroppableImageWidget(AdminImageWidget):
    def render(self, name, value, attrs=None):
        if value:
            file_obj = File.objects.get(pk=value)
            attrs = attrs or {}
            attrs.update({
                'class': 'crop-thumb',
                'data-thumbnail-url':
                    file_obj.thumbnails['admin_sidebar_preview'],
                'data-field-name': name,
                'data-org-width': file_obj.width,
                'data-org-height': file_obj.height,
            })

        return super().render(name, value, attrs)

    class Media:
        js = (
            filer_settings.FILER_STATICMEDIA_PREFIX + 'js/popup_handling.js',
            getattr(settings, 'JQUERY_URL',
                    'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'),
            "image_cropping/js/jquery.Jcrop.min.js",
            "image_cropping/image_cropping.js",
        )
        css = {'all': ("image_cropping/css/jquery.Jcrop.min.css",)}


class CroppableFormField(AdminImageFormField):
    widget = CroppableImageWidget


class CroppableFilerImageField(FilerImageField):
    default_form_class = CroppableFormField