【问题标题】:How to remove images uploaded with django-ckeditor?如何删除使用 django-ckeditor 上传的图像?
【发布时间】:2014-11-29 19:53:44
【问题描述】:

我已经在 Django 管理界面的 CKEditor 中上传了一些图像。我可以通过单击编辑器中的“图像”按钮来浏览和选择图像,然后在弹出的窗口中单击“浏览服务器”。这是弹出窗口的屏幕截图:

我的问题是:如何删除服务器上的图片?

【问题讨论】:

    标签: django ckeditor django-ckeditor


    【解决方案1】:

    恐怕这对 ckeditor 来说是不可能的(至少我看不到这样的开箱即用功能)。

    您可以使用 django 文件管理器

    https://www.djangopackages.com/grids/g/file-managers/

    例如,django-filebrowser

    【讨论】:

      【解决方案2】:

      不幸的是,这是真的。 Django-ckeditor 没有为这个问题提供任何内置的解决方案。上传文件的相关信息不会存储在任何地方。

      如果你想保留它们 - 你必须自己做!

      使用重写的 delete 方法创建适当的数据模型(或使用任何可以为您处理文件删除的现成“智能字段”,Django delete FileField) :

      from django.db import models
      
      class UploadedFile(models.Model):
          uploaded_file = models.FileField(upload_to=u"storage/")
          uploaded_at = models.DateField(editable=False, auto_now_add=True)
      
          def __str__(self):
              return os.path.basename(self.uploaded_file.path)
      
          def url(self):
              return self.uploaded_file.url
      
          def delete(self, *args, **kwargs):
              file_storage, file_path = self.uploaded_file.storage, self.uploaded_file.path
              super(UploadedFile, self).delete(*args, **kwargs)
              file_storage.delete(file_path)
      

      提供您自己的“upload”(和可选的“browse”)视图实现,用于记忆交易:

      from django.conf import settings
      from django.contrib.admin.views.decorators import staff_member_required
      from django.views.decorators.cache import never_cache
      from django.views.decorators.csrf import csrf_exempt
      from ckeditor_uploader.views import upload, browse
      from .models import UploadedFile
      import re
      
      @staff_member_required
      @csrf_exempt
      def ckeditor_upload_wrapper(request, *args, **kwargs):
          response = upload(request, *args, **kwargs)
      
          if b"Invalid" not in response.content:
              try:
                  matched_regex = re.search("callFunction\(\d, '(.*)'\);", str(response.content))
                  file_location = matched_regex.group(1).lstrip(settings.MEDIA_URL)
                  UploadedFile(uploaded_file=file_location).save()
              except Exception:
                  pass
          return response
      
      @staff_member_required
      @csrf_exempt
      @never_cache
      def ckeditor_browse_wrapper(request, *args, **kwargs):
          return browse(request, *args, **kwargs)
      

      urls.py 中更改默认重定向:

      ...
      from app.views import ckeditor_upload_wrapper, ckeditor_browse_wrapper
      
      urlpatterns = [
          url(r'^admin/', admin.site.urls),
      
          #url(r'^ckeditor/', include('ckeditor_uploader.urls')),
          url(r'^ckeditor/upload/', ckeditor_upload_wrapper, name='ckeditor_upload'),
          url(r'^ckeditor/browse/', ckeditor_browse_wrapper, name='ckeditor_browse'),
          ...
      ]
      

      仅此而已...现在,如果您注册您的新 UploadedFile 模型,您将授予您直接从Django 管理面板。

      (此解决方案是为 Django 1.10 实现的,扩展名为 django-ckeditor 5.3

      【讨论】:

      • 这样一个被低估的答案!我正在考虑做类似的事情,但你省去了我写出大部分逻辑的麻烦。
      猜你喜欢
      • 2012-09-04
      • 2019-11-09
      • 1970-01-01
      • 2015-12-24
      • 2017-12-10
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多