2014-10-05 49 views
6

我在Django管理界面的CKEditor中上傳了一些圖片。我可以通過單擊編輯器中的「圖像」按鈕來瀏覽和選擇圖像,然後在彈出的窗口中單擊「瀏覽服務器」。這裏是彈出的截圖:如何移除使用django-ckeditor上傳的圖片?

Screenshot of the pop-up of CKEditor

我的問題是:我怎樣才能刪除服務器上的圖片?

回答

0

不幸的是,這是真的。 Django-ckeditor不提供任何針對該問題的內置解決方案。有關上傳文件的信息不會存儲在任何位置。

如果你想保留它們 - 你必須自己做!

創建具有覆蓋適當數據模型刪除方法(或使用任何準備「靈活字段」,它可以處理文件的刪除,對你來說,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) 

提供自己實施「上傳」(和可選的「瀏覽」)認爲,這將被用來記憶交易:

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的模型,您將授予瀏覽,搜索和刪除THA能力任何直接從Django管理面板上傳的圖片。

(該溶液爲實現的Django 1.10帶擴展Django的CKEditor的5.3